首页 > 解决方案 > 在 QListWidget 中添加 QMap 项目并选择该项目为活动的

问题描述

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

我会解释:

我有这个主窗口

在底部有一个 QListWidget,我想要做的是在列表中添加我在 costructor 上创建的所有 QMap 对象以及我在添加攻击时创建的对象。

基础窗口.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;

};

基本窗口.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 的连接吗?

标签: c++qtqt5

解决方案


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

推荐阅读