Last active
October 1, 2023 21:01
-
-
Save webmaster128/2d4df2e46818d4e76fb7f7b8940c841a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| bool ExceptionAwareQApplication::notify(QObject *receiver, QEvent *event) | |
| { | |
| try | |
| { | |
| return QApplication::notify(receiver, event); | |
| } | |
| catch (std::exception &ex) | |
| { | |
| // Type QMetaCallEvent requires private header <private/qobject_p.h> | |
| QMetaCallEvent *metaCallEvent = dynamic_cast<QMetaCallEvent *>(event); | |
| if (metaCallEvent) | |
| { | |
| QString receiverClassName = receiver->metaObject()->className(); | |
| QString signalSignature; | |
| const auto sender = metaCallEvent->sender(); | |
| const auto senderMeta = sender->metaObject(); | |
| for (auto i = senderMeta->methodOffset(); i < senderMeta->methodCount(); ++i) | |
| { | |
| const auto method = senderMeta->method(i); | |
| if (QMetaObjectPrivate::signalIndex(method) == metaCallEvent->signalId()) | |
| { | |
| signalSignature = QString::fromUtf8(method.methodSignature()); | |
| } | |
| } | |
| QString senderClassName = senderMeta->className(); | |
| qDebug() << "Caught std::exception during Qt slot invocation in class " | |
| << receiverClassName | |
| << " after emitting signal " << signalSignature | |
| << " from sender " << senderClassName; | |
| } | |
| // log exception content | |
| return false; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment