我应该在哪里重新实现QApplication :: notify功能?我的意思是,哪个班级?我自己的一个类或者是Qt类的一部分并在那里完成它?我需要这个,因为从服务器下载文件时出现以下错误(小文件下载正常,但大文件导致此消息):
Qt捕获了一个从事件处理程序抛出的异常。投掷 Qt不支持来自事件处理程序的异常。你必须 重新实现QApplication :: notify()并捕获所有异常。
答案 0 :(得分:10)
只是子类QApplication
并在您的notify(..)
方法中执行以下操作:
try {
return QApplication::notify( receiver, event );
} catch ( std::exception& e ) {
showAngryDialog( e );
return false;
}
然后在主函数中使用它而不是QApplication
。
答案 1 :(得分:6)
如前所述,创建自己的应用程序对象,该对象继承自QtApplication并重新定义'notify'。这是要走的路。但是请务必使用此构造函数:
MyApplication::MyApplication(int &argc, char *argv[]);
使用'&'将argc设置为参考这很重要,因为它避免了某些平台上的崩溃。
此处描述了完整的过程:http://qt-project.org/forums/viewthread/17731
我自己的实施:
class MyApplication : public QApplication
{
public:
MyApplication(int &argc, char ** argv);
// ~MyApplication();
private:
bool notify(QObject *receiver_, QEvent *event_);
};
(上面描述的崩溃发生在Ubuntu 13.10 64位上,但在版本12.04 64位时没有出现。)