我应该在哪里重新实现QApplication :: notify功能?

use*_*359 8 c++ qt

我应该在哪里重新实现QApplication :: notify功能?我的意思是,哪个班级?我自己的一个类或者是Qt类的一部分并在那里完成它?我需要这个,因为从服务器下载文件时出现以下错误(小文件下载正常,但大文件导致此消息):

Qt捕获了一个从事件处理程序抛出的异常.Qt不支持从事件处理程序中抛出异常.您必须重新实现QApplication :: notify()并捕获所有异常.

cma*_*t85 10

只是子类QApplication并在您的notify(..)方法中执行以下操作:

try {
    return QApplication::notify( receiver, event );
} catch ( std::exception& e ) {
    showAngryDialog( e );
    return false;
}
Run Code Online (Sandbox Code Playgroud)

然后在主函数中使用它而不是QApplication.


小智 6

如前所述,创建自己的应用程序对象,该对象继承自QtApplication并重新定义'notify'.这是要走的路.但是请务必使用此构造函数:

MyApplication::MyApplication(int &argc, char *argv[]);
Run Code Online (Sandbox Code Playgroud)

将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_);
};
Run Code Online (Sandbox Code Playgroud)

(上面描述的崩溃发生在Ubuntu 13.10 64位上,但在版本12.04 64位上没有出现.)

  • 关于使用“int &”的评论确实帮助了我。在我这样做之前,我的应用程序一直崩溃。 (2认同)