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

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

界面类

QtWidgetsTest.h

#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_QtWidgetsTest.h"
#include "CustomClass.h"
class QtWidgetsTest : public QMainWindow
{
    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 = new CustomClass(this); // 使用this指针实例化自定义类对象
    customClass->test(); // 调用函数
}

自定义类

CustomClass.h

  1. 首先包含ui头文件(其实也可不写,因为cpp里一定会包含QtWidgetsTest.h并包含ui文件),并声明界面类,注意此处不能使用包含,否则会报重复包含头文件的错误。
  2. 继承QMainWindow类,便于使用connect方法。
  3. 在构造时使用一个界面类指针作为参数,并在成员变量中定义一个界面类指针。
#pragma once

#include "ui_QtWidgetsTest.h"

class QtWidgetsTest;
class CustomClass : public QMainWindow
{
public:
	CustomClass(QtWidgetsTest* parent = nullptr);
	void test();
	QtWidgetsTest* p;
};

CustomClass.cpp

  1. 包含界面类,否则报未定义QtWidgetsTest
  2. 在构造中将成员变量的指针指向界面类传来的指针变量。
#include "CustomClass.h"
#include "QtWidgetsTest.h"
CustomClass::CustomClass(QtWidgetsTest* parent)
{
	p = parent;
}
void CustomClass::test() {
	p->ui.pushButton->setText("test");
	connect(p->ui.pushButton, &QPushButton::clicked, [=]() {
		p->ui.pushButton->setText("clicked");
		});
}

这里实现了在自定义类中访问ui控件并使用connect方法调用成员函数,避免了频繁使用信号和槽跳转。如果涉及到多线程将自定义类继承QThread并在start方法中访问ui。

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值