我试图在我的Qt应用程序中处理异常,我浏览了几篇文章,其中指出要重写QApplication::QApplication方法,以便在Qt中有效地处理异常。我不知道该在哪里添加这种覆盖的方法。是主机窗口.h还是main.cpp?我在MainWindow.h中添加了以下函数:
bool
notify(QObject * rec, QEvent * ev)
{
try
{
return QApplication::notify(rec,ev);
}
catch(Tango::DevFailed & e)
{
QMessageBox::warning(0,
"error",
"error");
}
return false;
}当我构建我的项目时,我会得到以下错误:
error: cannot call member function 'virtual bool QApplication::notify(QObject*, QEvent*)' without object我是c++和Qt.Could的新手,您让我知道如何实现这一点,这样我的所有异常都将得到有效的处理,并且应用程序不会崩溃。
发布于 2014-12-22 17:55:49
这是一个QApplication对象的方法。为了覆盖通知方法,您必须从QApplication继承,并且在您的main()中,您应该实例化类作为Qt应用程序
#include <QApplication>
class Application final : public QApplication {
public:
Application(int& argc, char** argv) : QApplication(argc, argv) {}
virtual bool notify(QObject *receiver, QEvent *e) override {
// your code here
}
};
int main(int argc, char* argv) {
Application app(argc, argv);
// Your initialization code
return app.exec();
}发布于 2014-12-22 18:02:37
错误:没有对象不能调用成员函数‘虚拟::QApplication(QObject*,QEvent*)’
该错误消息试图写入您试图在没有实际对象的情况下调用一个非静态方法。只有静态方法才能这样工作。即使它是这样的,但它并不是静态方法,因为C++不支持虚拟静态方法(遗憾的是,这是另一个主题)。
因此,我个人会这样做:
main.cpp
#include <QApplication>
#include <QEvent>
#include <QDebug>
class MyApplication Q_DECL_FINAL : public QApplication
{
Q_OBJECT
public:
MyApplication(int &argc, char **argv) : QApplication(argc, argv) {}
bool notify(QObject* receiver, QEvent* event) Q_DECL_OVERRIDE
{
try {
return QApplication::notify(receiver, event);
//} catch (Tango::DevFailed &e) {
// Handle the desired exception type
} catch (...) {
// Handle the rest
}
return false;
}
};
#include "main.moc"
int main(int argc, char **argv)
{
MyApplication application(argc, argv);
qDebug() << "QApplication::notify example running...";
return application.exec();
}main.pro
TEMPLATE = app
TARGET = main
QT += widgets
SOURCES += main.cpp构建和运行
qmake && make && ./main发布于 2014-12-22 17:54:39
与Qt中的其他事件处理程序一样,您需要定义从QApplication派生的子类并在那里实现bool notify (QObject *receiver, QEvent *e),然后使用类而不是QApplication。
https://stackoverflow.com/questions/27607825
复制相似问题