我有一个带有简单QLabel的Qt应用程序。我想知道是否有可能自动更新其文本,因为QLabel构造函数使用了引用。
QLabel ( const QString & text, QWidget * parent = 0, Qt::WindowFlags f = 0 )
我想要的是QLabel,当我更改QString内容时,其文本会更新。
我尝试了以下代码(使用Qt 5.0.2):
#include <QtGui>
#include <QtWidgets>
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QString str("test");
QLabel label(str);
label.setFixedSize(300,70);
label.show();
str = "yoh";
label.repaint();
return app.exec();
}
但标签仍显示“测试”。那么,我做错了什么,或者是否无法自动更新内容?
任何帮助将不胜感激。顺便说一下,如果我必须继承QLabel,那就没问题了。
答案 0 :(得分:8)
其实你可以做到。你需要创建模型。
QLabel label;
label.show();
QStandardItemModel *model = new QStandardItemModel(1,1);
QStandardItem *item1 = new QStandardItem(QStringLiteral("test"));
model->setItem(0, 0, item1);
使用QDataWidgetMapper在QLabel和模型中的部分之间添加映射。
QDataWidgetMapper *mapper = new QDataWidgetMapper();
mapper->setModel(model);
mapper->addMapping(&label,0,"text");
mapper->toFirst();
每次模型更改时,QLabel都会使用模型中的数据进行更新。
model->setData(model->index(0,0),"yoh");
答案 1 :(得分:0)
你不能这样做。 QtCore
库不提供C ++代码中的绑定表达式,但qt在QtQml
库中专门用于简化ui设计。如果你在谈论引用 - 你做错了,或多或少,这是不可能的。要自动更新您的代码,应实施subscriber
或observer
软件设计模式,并且QLabel
必须使用它。当你谈论引用时,C ++并不像你想象的那么简单。
如果您确实需要可自动更新的GUI,请尝试QML
。