设为首页 加入收藏

TOP

关于QT 中 QDialog的几点疑问的解答
2014-11-24 08:39:40 来源: 作者: 【 】 浏览:0
Tags:关于 QDialog 疑问 解答

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。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android菜单的实现 下一篇用Android NDK编译FFmpeg

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·【C语言】动态内存管 (2025-12-27 06:23:20)
·C语言中的内存管理 - (2025-12-27 06:23:16)
·C语言指南:C语言内 (2025-12-27 06:23:14)
·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)