方法:使用单例模式
- 将主窗口设计为单例模式。
- 在子界面中通过单例访问主窗口实例,并调用公共函数。
// mainwindow.h
#include <QMainWindow>
class MainWindow : public QMainWindow {
Q_OBJECT
public:
static MainWindow& instance() {
static MainWindow instance;
return instance;
}
void publicFunction();
private:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
MainWindow(const MainWindow&) = delete;
MainWindow& operator=(const MainWindow&) = delete;
// 其他成员变量和函数
};
// mainwindow.cpp
#include "mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
// 初始化代码
}
MainWindow::~MainWindow() {
// 析构代码
}
void MainWindow::publicFunction() {
qDebug() << "Public function called";
}
// subwidget.h
#include <QWidget>
class SubWidget : public QWidget {
Q_OBJECT
public:
explicit SubWidget(QWidget *parent = nullptr);
private slots:
void onButtonClicked();
};
// subwidget.cpp
#include "subwidget.h"
#include "mainwindow.h"
#include <QPushButton>
#include <QVBoxLayout>
SubWidget::SubWidget(QWidget *parent) : QWidget(parent) {
QPushButton *button = new QPushButton("Call Main Window Function", this);
QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(button);
connect(button, &QPushButton::clicked, this, &SubWidget::onButtonClicked);
}
void SubWidget::onButtonClicked() {
MainWindow::instance().publicFunction();
}
// main.cpp
#include "mainwindow.h"
#include "subwidget.h"
#include <QApplication>
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
MainWindow& w = MainWindow::instance();
SubWidget subWidget;
w.show();
subWidget.show();
return a.exec();
}