2.每天学点qt -----Dialog
我们可以看到上方的图片所示,slots 和signal 分别对应dialog的槽函数 和信号 接下来我们其进行研究
exec() open()的区别和使用
importan :Qt之show()、hide()、close()、exec()、open()比较
然后查询了官方的文档 有些迷茫于是 借鉴了 csdn u010779194用户的介绍 https://blog.csdn.net/u010779194/article/details/16818913 ,我原文转载了回来
(1)QWidget 的show()、hide()、setVisible()、setHidden() 这4个函数让人看得眼花缭乱,但是打开源代码一看,原来最终调用的只是一个函数:setVisible(bool visible)。下面是几个函数的源代码。代码一目了然:这四个函数中只有 setVisible 是独立的,它使得一个Widget可见或不可见,其他三个都是它的外套。setVisible(false)代表Widget不在界面上显示,但是并不代表对象被析构!
-
virtual void setVisible(bool visible);
-
inline void setHidden(bool hidden) { setVisible(!hidden); }
-
inline void hide() { setVisible(false); }
#ifndef Q_WS_WINCE
4. inline void show() { setVisible(true); }
#else
void show(); // 此函数在Qwidget_wince.cpp中实现,最终还是调用了setVisible(true);
#endif
(2)QWidget的close :这个函数在Qt的帮助文档中描述得很详细,它的执行过程是这样的:
首先,我们直接调用close(或者点击关闭按钮)时,它会生成 QCloseEvent 事件;
其次,我们可以选择阻止或接受改事件,如果我们接受了事件(默认),它就直接调用hide()函数,在界面上隐藏,如果我们阻止事件,close将直接返回,什么都不做;
再次,如果我们为它设置过标记位:Qt::WA_DeleteOnClose(关闭时删除它),则出来调用hide()外,还会调用deleteLater()函数。
(3)QDialog 和 QWidget 相比,多了 exec()、open()、done()、reject ()和 accept ()5个相关函数。
-
QDialog::show():非模态窗口显示,但是如果在窗口中显示设置为模态对话框:setModal (true),则显示半模态对话框。
-
QDailog::open():模态(窗口级)窗口显示。
-
QDialog::exec():模态(应用程序级)窗口显示。exec() 先设置modal属性,而后调用 show() 显示对话框,最后启用事件循环。在用户关闭这个对话框之前,不能和同一应用程序中的其它窗口交互。
-
QDialog::done(int):和close比较类似,因为它调用了close所调用的 close_helper 函数。只不过不同于close函数,它始终会先让Widget不可见,然后close操作,最后根据参数发射信号。
-
QDialog::reject():调用done()函数,源码为:done(Rejected)。
-
QDialog::accept():调用done()函数,源码为:done(Accepted)。
SLOTS accept 和 reject done SIGNALS accepted rejected() finished:
这两个槽信号都会关闭dialog但是不同点为,accept()关闭后 返回了Dialog::Accepted, reject()关闭后 返回了 Dialog::Rejected
这些的应用点在 一个对话窗点是
#include "mylg.h" mylg::mylg(QWidget *parent) : QDialog(parent) { ui.setupUi(this); connect( ui.pushButton_qd, SIGNAL(clicked()), this, SLOT(sl_ok()) ); connect( ui.pushButton_qx, SIGNAL(clicked()), this, SLOT(sl_no()) ); connect( ui.pushButton_wc, SIGNAL(clicked()), this, SLOT(sl_do()) ); } mylg::~mylg() { } //accept关闭窗口 返回1 int mylg::sl_ok() { accept(); return 0; } //reject 关闭窗口返回0 int mylg::sl_no() { reject(); return 0; } //done关闭窗口 自定义值 int mylg::sl_do() { done(6); return 0; }
mylg lg; int rec = lg.exec(); if(rec==QDialog::Accepted){ qDebug()<< "rec=" << rec << " "<< "accept"; }else if(rec==QDialog::Rejected) { qDebug()<< "rec=" << rec << " "<< "reject"; } //输出情况如果是确定按钮是 1 如果是取消按钮是0 源码放置在 链接:https://pan.baidu.com/s/1xXjKHGyuECINmoH8EtV1Rw 提取码:bil6 复制这段内容后打开百度网盘手机App,操作更方便哦
- 点赞
- 收藏
- 分享
- 文章举报
- 【QT】QT从零入门教程(十四):标准颜色对话框类QColorDialog
- QT控件学习:QInputDialog
- QT4 Creator创建基本的Dialog的几种方式
- QT中颜色选择器QColorDialog的重新实现
- QT中Dialog的使用
- QT 教程 之 基础Dialog
- Qt学习之路(18): Qt标准对话框之QInputDialog
- QT 窗体之间(MainWindow 和 Dialog)数据传递
- 2.关于QT中的Dialog(模态窗口),文件选择器,颜色选择器,字体选择器,消息提示窗口
- QT之对话框Dialog
- Qt学习之路(18): Qt标准对话框之QInputDialog
- 【Qt学习笔记】7.对话框Dialog
- Qt学习之路(16): Qt标准对话框之QColorDialog
- QT中的QInputDialog的小例子
- Qt 之路 (18)—标准对话框之QInputDialog
- QT的FindDialog
- 2.关于QT中的Dialog(模态窗口),文件选择器,颜色选择器,字体选择器,消息提示窗口
- Qt标准对话框之 QInputDialog-18
- C++QT qmake没有生成gotocelldialog.h的解决办法
- Qt for android 中做出系统级Dialog