gpt4 book ai didi

c++ - 如何将 lineEdits 分配给某个变量?

转载 作者:搜寻专家 更新时间:2023-10-31 02:24:43 26 4
gpt4 key购买 nike

我刚开始使用 Qt。我被困在这件事上。我的应用程序中有很多 lineEdits,其中的值可能会在应用程序运行时随时更改。 lineEdits 中的值只能是整数。在某个阶段,我需要检查 lineEdits 中的值并与整数数组进行比较。如果它们相等,则用户的任务完成。

在这里,我想将 lineEdits 的所有值存储到一个整数数组中,这样我就可以运行一个 for 循环来检查两个数组是否相等,而不是生成一个 if 每个 lineEdit 的条件。每当用户更改 lineEdit 中的值时,数组中的值都应更新,并且当数组中的相应值更改时,lineEdit 中的值也应更改。

我尝试使用一个 qvector,将 lineEdits 的值附加到其中。该 vector 现在具有 lineEdits 的值,但当其对应的值在 vector 中更改时不会更新值。

谁能帮忙解决这个问题?

最佳答案

我建议使用 QDataWidgetMapper,因为它会使用具有多个优点的模型/ View 设计模式。下面是一个示例,清楚地表明可以轻松汇总所有 QLineEdit 中的数据。该示例包含两个文件 main.cpp 和 mainwin.h:

ma​​inwin.h:

#ifndef MAINWIN_H
#define MAINWIN_H
#include <QtGui>
static const int lineEditCount=4;
class MainWin : public QMainWindow
{
Q_OBJECT
QStandardItemModel& model;
public:
explicit MainWin(QStandardItemModel& m)
: model(m)
{
setWindowTitle("QDataWidgetMapper Example");
resize(400,400);
QDataWidgetMapper* mapper=new QDataWidgetMapper(this);
mapper->setModel(&m);
QWidget *w = new QWidget;
QVBoxLayout *layout = new QVBoxLayout;
w->setLayout(layout);
for(int i=0;i<lineEditCount;++i)
{
QLineEdit* e=new QLineEdit;
layout->addWidget(e);
mapper->addMapping(e,i);
}
layout->addWidget(new QTextEdit);
setCentralWidget(w);
mapper->setCurrentIndex(0); // the only existing row is activated
reactToChange(0);
connect(&m,SIGNAL(itemChanged(QStandardItem*)),
this,SLOT(reactToChange(QStandardItem*)));
}
private slots:
void reactToChange(QStandardItem*)
{
QTextEdit* t=findChild<QTextEdit*>();
t->append("=========================");
for(int i=0;i<lineEditCount;++i)
t->append(model.item(0,i)->text());
}
};
#endif

ma​​in.cpp:

#include <QtGui>
#include "mainwin.h"
int main(int argc, char **argv)
{
QApplication app(argc, argv);
/* Create the data model. It has only one row, but as many columns as there are
QLineEdit. */
QStandardItemModel model(1,lineEditCount);
for(int column = 0; column < 4; ++column)
{
QStandardItem *item = new QStandardItem(QString("QLineEdit %0 value").arg(column));
model.setItem(0,column, item);
}
MainWin mainWin(model);
mainWin.show();
return app.exec();
}

每次 QLineEdit 的任何更改都会显示所有 QLineEdit 中值的新摘要,请参见下文。

enter image description here

关于c++ - 如何将 lineEdits 分配给某个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27752795/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com