解决问题
为了在其他类中调用主界面MainWindow的ui。
简易步骤
1. mainwindow.h
u i uiui: 设置为public
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); Ui::MainWindow *ui; // 公有化ui,供其他类调用 }; #endif // MAINWINDOW_H
2. mainwindow.cpp
包含其他类头文件
#include "mainwindow.h" #include "ui_mainwindow.h" #include "UDPserver.h" // 要调用的类 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); ui->UDP = new UDPserver(this); // 主界面指针this传给其他类 } MainWindow::~MainWindow() { delete ui; }
3. UDPserver.h
包含主界面的头文件及其ui文件
声明主界面类
#ifndef UDPSERVER_H #define UDPSERVER_H #include <QWidget> #include "mainwindow.h" #include "ui_mainwindow.h" class MainWindow; class UDPserver : public QWidget { Q_OBJECT public: explicit UDPserver(MainWindow *parent = nullptr); virtual ~UDPserver(); private: Ui::MainWindow *ui; }; #endif // UDPSERVER_H
4. UDPserver.cpp
ui设置为主界面的ui即可。
#include "UDPserver.h" UDPserver::UDPserver(MainWindow *parent) : QWidget(parent) { ui = parent->ui; } UDPserver::~UDPserver() {}
头文件互相引用
【member access into incomplete type】
解决办法:
A文件,B文件相互引用,实际上就是两个.h文件,不能同时存在include对方,一者换为声明。
A.h:包含B头文件
B.h:声明A类
B.cpp: 包含A头文件