在QListWidget中添加QMap项目,然后选择该项目为活动状态

时间:2018-08-03 14:56:23

标签: c++ qt qt5

我是QT的新手,我正尝试创建一个kalk。 可以在QListWidget上插入QMap对象吗?

我会解释:

我有这个MainWindow

在底部有一个QListWidget,我要在列表中添加在构造函数上创建的所有QMap对象以及在添加攻击时创建的对象。

baseWindow.h

#ifndef BASEWINDOW_H
#define BASEWINDOW_H

#include <QMainWindow>
#include <QWidget>
#include <QGridLayout>
#include <QLineEdit>
#include <QMessageBox>
#include <QTextEdit>
#include <QListWidget>
#include <QPushButton>

class baseWindow : public QWidget
{
    Q_OBJECT
public:
    explicit baseWindow(QWidget *parent = 0);

public slots:

    void changeKalkClicked();
    void addClicked();
    void clearClicked();
    void deleteClicked();
    void itemSelected();
private:

    QPushButton* addButton;
    QPushButton* clearButton;
    QPushButton* deleteButton;
    QLineEdit* displayBA;
    QMap<QString,BaseAttack> storedBA;
    QListWidget* list;

};

basewindow.cpp

baseWindow::baseWindow(QWidget *parent) : QWidget(parent)
{ //Omitted the button/layout/LineEdit creation

   list  = new QListWidget;

   storedBA.insert(tr("Empty"),BaseAttack());
   storedBA.insert(tr("First"),BaseAttack());

   QListWidgetItem* prova = new QListWidgetItem;

   prova->setText(tr("Try"));
   list->addItem(prova);

}

有可能吗?我需要创建一个从QMap到QListWidget的连接吗?

1 个答案:

答案 0 :(得分:0)

解决方案很简单,您只需要使用所按下项目的文本,我们就可以使用QMap获得BaseAttack,但要以简单的方式工作,BaseAttack类必须具有一个复制构造函数。

*。h

private slots:
    void onItemClicked(QListWidgetItem *item);

*。cpp

    storedBA.insert(tr("Empty"), BaseAttack());
    storedBA.insert(tr("First"), BaseAttack());

    QMapIterator<QString, BaseAttack> i(storedBA);
    while (i.hasNext()) {
        i.next();
        list->addItem(i.key());
    }
    connect(list, &QListWidget::itemClicked, this, &baseWindow::onItemClicked);
}


void baseWindow::onItemClicked(QListWidgetItem *item)
{
    BaseAttack ba = storedBA[item->text()];
}