[英]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.