我在QLabel
中设置了一个占位符为“user”。ui->setupUi(this);
之后,QLabel
通过ui->label->setText("superuser");
进行更改。之后不进行任何更改。
一旦QMainWindow
初始化并通过mw.show();
显示在main.cpp
文件中,QLabel
再次被设置为占位符“user”。
我试过:
qDebug()<<ui->label->text();
在ui->label->setText("superuser");
之前和之后,并将一个放在QMainWindow
的构造函数的末尾。结果:
user
superuser
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();
}
ui->label
设置为“当前:mainwindow.ui
中的“用户”。这就是我称之为placeholder的标准集合文本。mainwindow.ui
:
<property name="text">
<string>Current: user</string>
我的QDebug
输出当我启动程序,然后按注销:
1
"Current: user"
"Current: SuperUser"
"afterInit "Current: SuperUser"
2
"Current: user"
"Current: User"
如您所见,默认情况下,ui->label
设置为“当前:user”。在init
进程中,它被覆盖为“Current:超级用户”。但是当我启动程序时,它显示为“当前:只要我点击actionLogout
(mainwindow_ui
中的menubarbutton
),ui->label
就会被设置为“当前:用户”并显示为正确。
**注意:**我用给定的代码创建了一个新程序。ui->label
正常工作,在我的代码中没有在任何其他函数中进行更改。
1条答案
按热度按时间8nuwlpux1#
我发现了错误。我已经覆盖了
MainWindow::changeEvent(QEvent* event)
方法:mainwindow.cpp
Fix:
**我在
QMainWindow::changeEvent(event)
之前添加ui->label->setText( tr("Current: ") + currentUserString );
,因为当执行MainWindow::changeEvent(QEvent* event)
时,QLabel
被更改为. qm/. ts转换文件中的设置字符串。这就是为什么主窗口显示我“当前:用户”(来自翻译文件),而不是“当前:SuperUser”(在init函数中更改)新
mainwindow.cpp