解决问题
为了在其他类中调用主界面MainWindow的ui。
简易步骤
1. mainwindow.h
-
u
i
ui
ui: 设置为
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头文件