Qt C++中QLabel::setText动态更新失效问题及解决
QLabel无法动态更新静态变量内容的问题与解决
问题现象
尝试在QLabel中显示静态变量Client::saveData的指定内容时遇到异常:QLabel始终无法更新显示内容,但QMessageBox::information和qDebug()都能正常输出该变量的正确值。将setText调用放在构造函数中时可以正常显示,但需要动态更新文本时完全失效——即使在setTandHLabel函数中直接调用setText("Tempdata")、把ui->tempText保存为变量后从主窗口调用setText,或是调用update()/repaint()都没有效果,且没有其他代码对该QLabel进行控制。
相关代码
原项目代码(存在问题)
// network.h public: static QByteArray saveData; // network.cpp QByteArray Client::saveData = "TEST"; void S8524Widget::setTandHLabel() { QString tempdata(Client::saveData.left(2)); ui->tempText->setText(tempdata); }
测试项目代码(可正常运行)
// network.h public: static QByteArray saveData; // network.cpp QByteArray udpNetwork::saveData = "TEST"; // mainwindow.cpp void MainWindow::setdata() { ui->label->setText(QString(udpNetwork::saveData.right(2))); }
解决方案
由于需要动态更新saveData的显示,原本使用了定时器,但将定时器的连接方式从lambda表达式改为SIGNAL/SLOT宏语法后,问题得到解决:
connect(timer, SIGNAL(timeout()), this, SLOT(setTandHLabel()));
内容的提问来源于stack exchange,提问作者Galdos
相关产品推荐
相关产品推荐

