要学好QT:
- C++基本语法一定要扎实啊,建议先看c++ primer plus这本书,有能力的可以看看英文的
- 遇到问题要习惯于看文档和源码解决
- 多实践,多打代码
问题
- 在
QDialog
里放入一个Push Button
,关联pushButton
的clicked()
信号和
QDialog的
accept()`槽。 - 代码
#include "mainwindow.h"
#include
#include "logindlg.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
LoginDlg dlg; // LoginDlg继承QDialog
if(dlg.exec() == QDialog::Accepted) // 利用Accepted返回值判断按钮是否被按下
{
w.show(); // 如果被按下,显示主窗口
return a.exec(); // 程序一直执行,直到主窗口关闭
}
else return 0; //如果没有被按下,则不会进入主窗口,整个程序结束运行
}
但是问题来了,根据文档:
accept()
: Hides the modal dialog and sets the result code to Accepted.exec()
: Shows the dialog as a modal dialog, blocking until the user closes it. The function returns a DialogCode result.
通过源码查看accept内部也只是调用setVisible函数
点击按钮之后明明只是QDialog只是隐藏,exec()
为什么会返回参数呢?
解决
原来只要hide QDialog就会exec()停止阻塞并返回参数。可以参考QDialog在hide()之后,就被销毁的原因
文档信息
- 本文作者:wzx
- 本文链接:https://masterwangzx.com/2018/10/12/1-QDialog-accept/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)