实现效果叙述如下: 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_OBJECTpublic: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_OBJECTpublic:explicit Form(QWidget *parent = 0);~Form();private:Ui::Form *ui;
};#endif // FORM_H