QDialog继承自QWitget,自然从基类继承了一个显示函数show(),然而QDialog自己还提供了一个特殊的显示函数exec(),二者的区别如下:
show();
显示一个非modal的对话框,控制权立刻返回给调用函数,弹出窗口是否是model对话框,可由modal值决定。
exec();
显示一个modal的对话框,并且锁住程序 直到用户关闭对话框为止,函数返回一个DialogCode结果。在对话框弹出期间,用户不可切换其他窗口。
#include
#include "mywidget.h"
#include "mydialog.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyWidget w;
MyDialog dialog; //新建MyDialog类对象
if(dialog.exec()==QDialog::Accepted){ //判断dialog执行结果
w.show(); //如果是按下了“进入主界面”按钮,则显示主界面
return a.exec(); //程序正常运行
}
else return 0; //否则,退出程序
}
#include "mydialog.h"
#include "ui_mydialog.h"
MyDialog::MyDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::MyDialog)
{
ui->setupUi(this);
}
MyDialog::~MyDialog()
{
delete ui;
}
void MyDialog::on_pushButton_clicked()
{
accept();
}
#include "mywidget.h"
#include "ui_mywidget.h"
#include // 包含头文件
#include "mydialog.h"
#include
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyWidget)
{
ui->setupUi(this);
}
MyWidget::~MyWidget()
{
delete ui;
}
// 显示子窗口按钮
void MyWidget::on_showChildButton_clicked()
{
QDialog *dialog = new QDialog(this);
dialog->show();
}
// 重新登录按钮
void MyWidget::on_pushButton_clicked()
{
// 先关闭主界面,其实是隐藏起来了,并没有真正退出
close();
// 新建MyDialog对象
MyDialog dlg;
// 如果按下了“进入主窗口”按钮,则再次显示主界面
// 否则,因为现在已经没有显示的界面了,所以程序将退出
if(dlg.exec()== QDialog::Accepted) show();
}
依靠exec的返回值 完成在dialog和widget之间的自由跳转