在实际应用中,经常会出现需要自定义类访问界面中的控件的情况,使用信号和槽进行跳转往往过于繁琐,使用下述方法可以巧妙解决:
界面类
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
- 首先包含ui头文件(其实也可不写,因为cpp里一定会包含QtWidgetsTest.h并包含ui文件),并声明界面类,注意此处不能使用包含,否则会报重复包含头文件的错误。
- 继承
QMainWindow
类,便于使用connect
方法。 - 在构造时使用一个界面类指针作为参数,并在成员变量中定义一个界面类指针。
#pragma once
#include "ui_QtWidgetsTest.h"
class QtWidgetsTest;
class CustomClass : public QMainWindow
{
public:
CustomClass(QtWidgetsTest* parent = nullptr);
void test();
QtWidgetsTest* p;
};
CustomClass.cpp
文章来源:https://www.toymoban.com/news/detail-588456.html
- 包含界面类,否则报未定义
QtWidgetsTest
。 - 在构造中将成员变量的指针指向界面类传来的指针变量。
#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。文章来源地址https://www.toymoban.com/news/detail-588456.html
到了这里,关于QT在自定义类中调用主类(界面类ui及其控件)的一种实用方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!