繁体   English   中英

在QListWidget中添加QMap项并将其选择为活动

[英]Add QMap items in a QListWidget and select the item as active

我是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的连接吗?

解决方案很简单,您只需要使用所按下项目的文本,然后使用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()];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM