• 4170阅读
  • 5回复

[提问]如何在信号发送方catch到从槽函数中throw出来的异常 [复制链接]

上一主题 下一主题
离线雷小某
 

只看楼主 倒序阅读 楼主  发表于: 2013-08-03
如题,目前做的东西需要处理槽函数抛出来的异常,我尝试着用标准C++的做法,直接把信号发送放在try块里,无奈Qt给提示说不支持什么的,说要自己实现notify什么的,还望论坛高人赐教
离线roywillow

只看该作者 1楼 发表于: 2013-08-04
我记得Qt是关掉了exceptions支持的
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线雷小某

只看该作者 2楼 发表于: 2013-08-04
引用第1楼roywillow于2013-08-04 09:37发表的  :
我记得Qt是关掉了exceptions支持的


呃~有没有什么办法来捕获异常呢?因为处理异常在我这里比较重要。
离线XChinux

只看该作者 3楼 发表于: 2013-08-04
Qt编译时有选项是是否使用异常.

不过传统的Qt开发是不怎么使用异常的,有那些返回值/lastError()等来处理错误信息.

C++中对于异常声明等也没有像Java那样严格规定.   所以你可以根据自己的需要情况使用异常.
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线XChinux

只看该作者 4楼 发表于: 2013-08-04
emit信号时,是否能catch到slot发出的信号,这个不好处理.因为本身signal-slot的执行到底是同步/异步,这个没定(尽管有默认规则),还有它是在EventLoop里处理的(比如QApplication::exec()/QThread::exec()/QEventLoop::exec())里执行调用的,而不一定是在你emit信号的地方.  所以暂时就放弃这个想法吧,除非emit前就确认将它放到某个确定的QEventLoop循环里执行.你的try()要将这个QEventLoop::exec和这个emit包含起来.
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线XChinux

只看该作者 5楼 发表于: 2013-08-04
因为在slot里,你是能找到sender是谁的,为何不在这个slot里,try ... catch() ???
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个