实现效果叙述如下: MainWindow
中的按钮实现Form
窗体的开关,Form
窗体的关闭
按钮禁用掉,只允许使用窗体按钮进行,且关闭MainWindow
按钮时Form
窗体随之关闭。
注意: 要想实现关闭MainWindow
按钮时Form
窗体随之关闭,Form
窗体的close()
在MainWindow
的析构函数中无法实现,需要将其写入MainWindow
的关闭事件中。
废话不多说,直接上代码:
main.cpp
#include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }
form.c
#include "form.h" #include "ui_form.h" Form::Form(QWidget *parent) : QWidget(parent), ui(new Ui::Form) { ui->setupUi(this); setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint); // 禁用Form窗体的关闭按钮 } Form::~Form() { delete ui; }
mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); void closeEvent(QCloseEvent *); // 重写MainWindow的关闭事件 private slots: void on_pushButton_clicked(); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" #include "form.h" #include <QDebug> static bool newWinFlag = false; Form *configWindow = NULL; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); configWindow = new Form; } MainWindow::~MainWindow() { delete ui; } void MainWindow::closeEvent(QCloseEvent *e) { configWindow->close(); // 此处为了实现关闭MainWindow的同时也关闭Form窗体 } void MainWindow::on_pushButton_clicked() { qDebug() << newWinFlag; newWinFlag = !newWinFlag; if(newWinFlag == true) { configWindow->show(); return; } else { configWindow->close(); return; } }
form.h
#ifndef FORM_H #define FORM_H #include <QWidget> namespace Ui { class Form; } class Form : public QWidget { Q_OBJECT public: explicit Form(QWidget *parent = 0); ~Form(); private: Ui::Form *ui; }; #endif // FORM_H