打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
QDialog的accept()函数和reject()函数

QDialog的accept()函数和reject()函数

这两个函数作用分别是:都能够隐藏QDialog,但是返回值不同,一个是Accepted,一个是Rejected,

返回值不同的作用是:区分用户按下的OK按钮,还是Cancel按钮。

f(my1.exec()==QDialog::Accepted)

my1是一个对话框,当调用exec方法时,弹出,等待用户响应,用户可能点击确定,那么exec返回QDialog::Accepted值,如果点击取消则返回QDialog::Rejected,这句话是通过返回值来确定用户的响应结果

1.如果使用exec()默认为模态的。如果用show()需要设置setModel(true)才是模态的。

2.当删除一个dialog对象时,exec()返回QDialog::Rejected,因此在删除dialog时要特别小心。举例说明一下:

A 是一个QWidget 。B是一个QDialog,B = new QDialog(A)。
    int rec = B->exec();
    if (!thisDeleted)
    {
        if (rec == QDialog::Accepted)
            emit endSession();

    if (rec == QDialog::Rejected)
            emit endSession2();   

}

endSession()和 endSession2()都是A得成员函数。当删除A时,B也会删除(因为B得parent是A),这个时候exec()会返回QDialog::Rejected,此时下面的 emit endSession2()还会继续执行,这个时候就会出现端错误了,因为A比B先删除,而此时还要调用A的成员,A都被删除了,还能调用其成员函数?要是能调用就奇了怪了。因此在类A中多了个静态变量thisDeleted,记得在析构A的时候把这个值改变了,这样就不会在调用emit endSession2(),也就不会出现段错了。

3.exec()是一个循环时间函数,哪它什么时候才能返回了?当调用 accept()(返回QDialog::Accepted), reject()(返回QDialog::Rejected),done(int r)(返回r),close()(返回QDialog::Rejected),hide()(返回QDialog::Rejected),destory()(返回QDialog::Rejected)。还有就是delete 自己的时候也会返回 QDialog::Rejected(destory()就会delete自己)

4.close()会销毁对象嘛。答案是只有当设置了 setAttribute(WA:closeOnDelelte)是才会删除,如果这个标志没有设置,其作用和hide(),setvisible(false)一样,只会隐藏改对象。

5.当dialog在exec()时候。后台线程同样可以操作界面,如收到每个消息,还可以弹出QDialog。


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
利用Accepted信号判断enterBtn是否被按下
Qt - QDialog,QWidget实现模态及非模态
PyQt5中弹出框QDialog的show()和exec()的区别
07
第2篇 Qt5基础(二)编写Qt多窗口程序
Python QT由登陆界面到主界面
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服