在實際應(yīng)用中,經(jīng)常會出現(xiàn)需要自定義類訪問界面中的控件的情況,使用信號和槽進行跳轉(zhuǎn)往往過于繁瑣,使用下述方法可以巧妙解決:
界面類
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(); // 調(diào)用函數(shù)
}
自定義類
CustomClass.h
- 首先包含ui頭文件(其實也可不寫,因為cpp里一定會包含QtWidgetsTest.h并包含ui文件),并聲明界面類,注意此處不能使用包含,否則會報重復(fù)包含頭文件的錯誤。
- 繼承
QMainWindow
類,便于使用connect
方法。 - 在構(gòu)造時使用一個界面類指針作為參數(shù),并在成員變量中定義一個界面類指針。
#pragma once
#include "ui_QtWidgetsTest.h"
class QtWidgetsTest;
class CustomClass : public QMainWindow
{
public:
CustomClass(QtWidgetsTest* parent = nullptr);
void test();
QtWidgetsTest* p;
};
CustomClass.cpp
文章來源:http://www.zghlxwxcb.cn/news/detail-588456.html
- 包含界面類,否則報未定義
QtWidgetsTest
。 - 在構(gòu)造中將成員變量的指針指向界面類傳來的指針變量。
#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");
});
}
這里實現(xiàn)了在自定義類中訪問ui控件并使用connect方法調(diào)用成員函數(shù),避免了頻繁使用信號和槽跳轉(zhuǎn)。如果涉及到多線程將自定義類繼承QThread
并在start
方法中訪問ui。文章來源地址http://www.zghlxwxcb.cn/news/detail-588456.html
到了這里,關(guān)于QT在自定義類中調(diào)用主類(界面類ui及其控件)的一種實用方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!