9

我应该在哪里重新实现 QApplication::notify 函数?我的意思是,哪个班?我自己的类之一或 Qt 的一些类的子类并在那里做?我需要这个,因为从服务器下载文件时出现以下错误(小文件下载正常,但大文件会导致此消息):

Qt 已捕获从事件处理程序抛出的异常。Qt 不支持从事件处理程序中抛出异常。您必须重新实现 QApplication::notify() 并在那里捕获所有异常。

4

2 回答 2

11

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

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

然后在你的 main 函数中使用它而不是QApplication.

于 2012-12-14T12:26:32.423 回答
7

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

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 位版本上不存在。)

于 2013-11-09T14:16:43.217 回答