随便新建一个主窗体
再随便建一个对话框dialog
接下来在主函数中调用dialog
第一种:
#include "widget.h" #include "dialog.h" #include <QDebug> #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); Dialog d; d.exec(); qDebug()<<"看看走到了这里没有"; return a.exec(); }
d.exec();
阻塞窗体,也阻塞代码,除非你点击确定或取消离开了dialog的界面,否则主窗体会一直阻塞
第二种:
#include "widget.h" #include "dialog.h" #include <QDebug> #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); Dialog d; d.show(); qDebug()<<"看看走到了这里没有"; return a.exec(); }
d.show();
不阻塞窗体,也不会阻塞代码,即便不关闭这个dialog 后面原本程序内容也可以正常运行。
第三种:
#include "widget.h" #include "dialog.h" #include <QDebug> #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); Dialog d; //模态 d.setModal(true); d.show(); qDebug()<<"看看走到了这里没有"; return a.exec(); }
在调用dialog之前,先将其转为模态,不阻塞代码,但是阻塞窗体
如果设置为false,就是默认状态,和第二种情况相同。
可以调用accept()函数,结束exec()
先做一个简单的登陆界面
然后给两个 push button 写上槽函数
void Dialog::on_pushButton_clicked() { QString a = ui->lineEdit->text(); QString b = ui->lineEdit_2->text(); if(a == b) { accept(); } } void Dialog::on_pushButton_2_clicked() { close(); }
这里简单的写成当账号密码相等时登陆验证成功
接着再主函数中先创建窗体,这里对话框选择第一种,阻塞窗体也阻塞代码,这样再密码输入错误的时候就无法进入主窗体界面
int main(int argc, char *argv[]) { QApplication a(argc, argv); Dialog d; if(d.exec() == QDialog::Rejected) { return 0; } Widget w; w.show(); qDebug()<<"看看走到了这里没有"; return a.exec(); }