需求背景:在其他类中使用mainwindow主窗口的UI指针改变界面元素
计划实现思路:
1、将主窗口中的Ui::MainWindow *ui指针传递给需要使用它的类
2、在该类中使用传递进来的指针操作界面元素
注意:为什么不传递主窗口的指针?因为一般情况下ui是一个私有成员,不能在类外调用它。
工程构成图如下:
说明:
1、在 Test类 中改变 MainWindow类 中 label标签 的文本内容。
2、Test类 和 MainWindow类 相互包含 记得在各自头文件中前置声明对方
3、要使用ui指针操作界面元素,Test类的头文件中这句代码必须有 #include "ui_mainwindow.h"
---------------------------------分割线---------------------------------
Test.h 代码如下
#ifndef TEST_H
#define TEST_H
#include <QObject>
#include "mainwindow.h"
#include "ui_mainwindow.h"
class MainWindow; // 前置声明
class Test : public QObject
{
Q_OBJECT
public:
explicit Test(Ui::MainWindow * p);
Ui::MainWindow* exUI;
signals:
};
#endif // TEST_H
Test.cpp 代码如下
#include "test.h"
Test::Test(Ui::MainWindow * p):
exUI(p)
{
exUI->label->setText("11111");
}
mainwindow.h 代码如下
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "test.h"
class Test; // 前置声明
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
Test* pTest;
};
#endif // MAINWINDOW_H
mainwindow.cpp 代码如下
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
pTest = new Test(ui); // 将ui指针传入Test类
}
MainWindow::~MainWindow()
{
delete ui;
}
运行结果: