QMainWindow显示后QLabel文本未更新问题求助
QLabel文本在窗口显示后被莫名重置为占位符的问题
我在mainwindow.ui里给QLabel设置的默认文本是"Current: user",执行ui->setupUi(this);之后,通过ui->label->setText("SuperUser");修改了文本,之后没有再对这个QLabel做任何操作。但在main.cpp里调用mw.show();显示QMainWindow后,QLabel的文本又变回了"Current: user"。
已做的排查步骤
- 在
ui->label->setText("SuperUser");前后以及MainWindow构造函数末尾添加qDebug()<<ui->label->text();,输出显示文本确实被修改为"SuperUser",但窗口显示后又被重置 - 用nano检查
mainwindow.ui文件,未发现异常配置 - 排查所有信号槽连接,没有关联QLabel文本修改的槽函数
- 确认
main.cpp中mw.show();仅调用一次 - 确认没有外部线程在QMainWindow外修改QLabel文本
最小复现代码
mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" using namespace std; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); this->init(); qDebug() << "afterInit" << ui->label->text(); } void MainWindow::init() { this->set_options("SuperUser"); } void MainWindow::set_options(QString s) { debugInt++; qDebug() << debugInt; qDebug() << ui->label->text(); ui->label->setText(s); qDebug() << ui->label->text(); } void MainWindow::on_actionLogout_triggered() { this->set_options("User"); }
mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QtWidgets/QMainWindow> #include <QDebug> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public slots: void set_options(QString s); public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: void init(); Ui::MainWindow *ui; int debugInt=0; private slots: void on_actionLogout_triggered(); }; #endif //MAINWINDOW_H
main.cpp
#include "mainwindow.h" #include <QtWidgets/QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); a.setQuitOnLastWindowClosed(true); MainWindow w; w.show(); return a.exec(); }
mainwindow.ui 关键配置片段
<property name="text"> <string>Current: user</string>
调试输出
程序启动并点击logout菜单栏按钮后的qDebug输出:
1 "Current: user" "Current: SuperUser" afterInit "Current: SuperUser" 2 "Current: user" "Current: User"
从输出可以看到:初始化过程中QLabel文本被成功修改为"Current: SuperUser",但窗口实际显示的仍是"Current: user";点击logout按钮后,文本被设置为"Current: User"并能正常显示。
注:使用上述代码新建项目可正常运行,但我的实际项目中没有其他修改该QLabel的代码,却出现了这个问题。
内容的提问来源于stack exchange,提问作者red power
相关产品推荐
相关产品推荐

