对话框介绍
QWidget和QDialog有什么不同
QDialog:
QWidget:
代码试验: QWidget和QDialog区别
代码1:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
w.resize(300,300);
QDialog d(&w);
d.resize(150,150);
w.show();
d.show();
return a.exec();
}
效果:
可以看到,对话框始终都是作为独立的交互窗口
代码2:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w1;
w1.resize(300,300);
QWidget w2(&w1);
w2.resize(150,150);
w1.show();
w2.show();
return a.exec();
}
效果:
可以看到只出现了一个窗口,并没有出现第二个窗口
对话框类型
模态对话框
实验代码:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
w.resize(300,300);
w.show();
QDialog d(&w);
d.resize(150,150);
d.exec(); //进入对话框d的消息循环,从而实现阻塞式调用
return a.exec();
}
非模态对话框
实验代码:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
w.resize(300,300);
w.show();
QDialog *d = new QDialog(&w);
d->setAttribute(Qt::WA_DeleteOnClose);
d->resize(150,150);
d->show();
return a.exec();
}
混合模态对话框
实验代码:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
w.resize(300,300);
w.show();
QDialog *d = new QDialog(&w);
d->setAttribute(Qt::WA_DeleteOnClose);
d->setModal(true);
d->resize(150,150);
d->show();
return a.exec();
}
对话框返回值处理
-使用void QDialog::done ( int r ) 作为交互结果,将r值返回给exec()
-返回值为QDialog::Accepted时,表示用户操作成功
-返回值为QDialog::Rejected时,表示用户操作失败
-也可以自定义返回数值