在实际应用中,经常会出现需要自定义类访问界面中的控件的情况,使用信号和槽进行跳转往往过于繁琐,使用下述方法可以巧妙解决:
界面类
QtWidgetsTest.h
#pragmaonce#include<QtWidgets/QMainWindow>#include"ui_QtWidgetsTest.h"#include"CustomClass.h"classQtWidgetsTest:publicQMainWindow{
Q_OBJECT
public:QtWidgetsTest(QWidget *parent =nullptr);
Ui::QtWidgetsTestClass ui;
CustomClass* customClass;};
QtWidgetsTest.cpp
#include"QtWidgetsTest.h"QtWidgetsTest::QtWidgetsTest(QWidget *parent):QMainWindow(parent){
ui.setupUi(this);
customClass =newCustomClass(this);// 使用this指针实例化自定义类对象
customClass->test();// 调用函数}
自定义类
CustomClass.h
- 首先包含ui头文件(其实也可不写,因为cpp里一定会包含QtWidgetsTest.h并包含ui文件),并声明界面类,注意此处不能使用包含,否则会报重复包含头文件的错误。
- 继承
QMainWindow
类,便于使用connect
方法。 - 在构造时使用一个界面类指针作为参数,并在成员变量中定义一个界面类指针。
#pragmaonce#include"ui_QtWidgetsTest.h"classQtWidgetsTest;classCustomClass:publicQMainWindow{public:CustomClass(QtWidgetsTest* parent =nullptr);voidtest();
QtWidgetsTest* p;};
CustomClass.cpp
- 包含界面类,否则报未定义
QtWidgetsTest
。 - 在构造中将成员变量的指针指向界面类传来的指针变量。
#include"CustomClass.h"#include"QtWidgetsTest.h"CustomClass::CustomClass(QtWidgetsTest* parent){
p = parent;}voidCustomClass::test(){
p->ui.pushButton->setText("test");connect(p->ui.pushButton,&QPushButton::clicked,[=](){
p->ui.pushButton->setText("clicked");});}
这里实现了在自定义类中访问ui控件并使用connect方法调用成员函数,避免了频繁使用信号和槽跳转。如果涉及到多线程将自定义类继承
QThread
并在
start
方法中访问ui。
本文转载自: https://blog.csdn.net/qq_42990969/article/details/129597020
版权归原作者 Villanelle# 所有, 如有侵权,请联系我们删除。
版权归原作者 Villanelle# 所有, 如有侵权,请联系我们删除。