模态,非模态对话框

转载自

http://www.linuxidc.com/Linux/2011-04/35161.htm

http://www.kuqin.com/qtdocument/qdialog.html#accept

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。

6.

void QDialog::accept () [虚 保护 槽]

隐藏模式对话框并且设置结果代码为 Accepted

请参考reject()和done()。

实例:chart/setdataform.cpp

void QDialog::done ( int r ) [虚 保护 槽]

隐藏模式对话框并且设置结果代码为 r 。这将使用本地事件循环来完成,并且 exec ()返回 r

如果对话框使用WDestructiveClose来被设置,done()也会销毁这个对话框。如果对话框是应用程序的主窗口部件,那么应用程序终止。

请参考accept()、reject()、QApplication::mainWidget()和QApplication::quit()。

int QDialog::exec () [槽]

执行模式对话框。控制传递给这个对话框一直到用户关闭它,在本地事件循环完成的点并且函数返回 DialogCode 结果。在用户关闭这个对话框之前,不能和同一应用程序中的其它窗口交互。对于非模式或半模式对话框请使用 show ()。

请参考show()和result()。

实例:chart/chartform.cppi18n/main.cppnetwork/networkprotocol/view.cpp、a href="qdir-example.html#x1805">qdir/qdir.cpp、showimg/showimg.cppwizard/main.cpp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值