0


QT在自定义类中调用主类(界面类ui及其控件)的一种实用方法

在实际应用中,经常会出现需要自定义类访问界面中的控件的情况,使用信号和槽进行跳转往往过于繁琐,使用下述方法可以巧妙解决:

界面类

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
  1. 首先包含ui头文件(其实也可不写,因为cpp里一定会包含QtWidgetsTest.h并包含ui文件),并声明界面类,注意此处不能使用包含,否则会报重复包含头文件的错误。
  2. 继承QMainWindow类,便于使用connect方法。
  3. 在构造时使用一个界面类指针作为参数,并在成员变量中定义一个界面类指针。
#pragmaonce#include"ui_QtWidgetsTest.h"classQtWidgetsTest;classCustomClass:publicQMainWindow{public:CustomClass(QtWidgetsTest* parent =nullptr);voidtest();
    QtWidgetsTest* p;};
CustomClass.cpp
  1. 包含界面类,否则报未定义QtWidgetsTest
  2. 在构造中将成员变量的指针指向界面类传来的指针变量。
#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。

标签: ui qt c++

本文转载自: https://blog.csdn.net/qq_42990969/article/details/129597020
版权归原作者 Villanelle# 所有, 如有侵权,请联系我们删除。

“QT在自定义类中调用主类(界面类ui及其控件)的一种实用方法”的评论:

还没有评论