对话框几种调用方式
随便新建一个主窗体
再随便建一个对话框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(); }
可以在完善一下,加上对密码错误的判断
void Dialog::on_pushButton_clicked() { QString a = ui->lineEdit->text(); QString b = ui->lineEdit_2->text(); if(a > 0 && a == b) { ui->label_3->setText(0); accept(); } else if (a != b) { ui->label_3->setText("密码错误,请重新输入"); ui->lineEdit->setText(0); ui->lineEdit_2->setText(0); } }
如果密码错误,再一个label中提示密码错误,同时i清空两个lineEdit中的内容
接下来在主窗体中加入一个退出按钮,并且再点击该按钮后弹出一个对话框进行二次判断
先给退出对话框写槽函数
void Quit::on_pushButton_clicked() { reject(); } void Quit::on_pushButton_2_clicked() { accept(); }
两个按钮分别对应刚才的确认退出和取消退出。
reject() 返回值是QDialog::Reject 收到该信号后关闭对话框
accept() 返回值是 QDialog::Accept 保持原样同时结束exec()
所以在主窗体的退出按钮槽函数中
void Widget::on_pushButton_clicked() { Quit q(this); if(q.exec() == QDialog::Rejected) { this->close(); } }
我们使用一下
故意输入错密码时,清空两个lineEdit,同时label提示
输入正确密码进入主窗体,
点击取消 对话框消失
点击确定 退出整个程序