您的位置:首页 > 编程语言 > Qt开发

2.每天学点qt -----Dialog

2020-04-05 07:24 1276 查看


我们可以看到上方的图片所示,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不在界面上显示,但是并不代表对象被析构!

  1. virtual void setVisible(bool visible);

  2. inline void setHidden(bool hidden) { setVisible(!hidden); }

  3. 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个相关函数。

  1. QDialog::show():非模态窗口显示,但是如果在窗口中显示设置为模态对话框:setModal (true),则显示半模态对话框。

  2. QDailog::open():模态(窗口级)窗口显示。

  3. QDialog::exec():模态(应用程序级)窗口显示。exec() 先设置modal属性,而后调用 show() 显示对话框,最后启用事件循环。在用户关闭这个对话框之前,不能和同一应用程序中的其它窗口交互。

  4. QDialog::done(int):和close比较类似,因为它调用了close所调用的 close_helper 函数。只不过不同于close函数,它始终会先让Widget不可见,然后close操作,最后根据参数发射信号。

  5. QDialog::reject():调用done()函数,源码为:done(Rejected)。

  6. 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,操作更方便哦
  • 点赞
  • 收藏
  • 分享
  • 文章举报
cs温柔 发布了12 篇原创文章 · 获赞 0 · 访问量 324 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: