繁体   English   中英

自动更新QLabel文本

[英]Automatically update QLabel text

我有一个简单的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,那就没问题了。

其实你可以做到。 你需要创建模型。

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");

你不能这样做。 QtCore库不提供C ++代码中的绑定表达式,但qt在QtQml库中专门用于简化ui设计。 如果你在谈论引用 - 你做错了,或多或少,这是不可能的。 要自动更新,您的代码应实现subscriberobserver软件设计模式,并且您的QLabel必须使用它。 当你谈论引用时,C ++并不像你想象的那么简单。

如果您确实需要可自动更新的GUI,请尝试QML

暂无
暂无

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

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