Qt 如何报告来自自定义QML组件的错误?
我制作了一个MyComponent QML组件,它具有一些属性:Qt 如何报告来自自定义QML组件的错误?,qt,qml,qtquick2,Qt,Qml,Qtquick2,我制作了一个MyComponent QML组件,它具有一些属性: Q_PROPERTY(PendingList* list MEMBER list) 和一个函数: Q_INVOKABLE void send(); QQuickView view; m_engine = view.engine(); 它可以在QML中创建: MyComponent { id: myComponent } 当我在某个地方调用myComponent.send()而列表属性未定义时,如何在stderr中正
Q_PROPERTY(PendingList* list MEMBER list)
和一个函数:
Q_INVOKABLE void send();
QQuickView view;
m_engine = view.engine();
它可以在QML中创建:
MyComponent {
id: myComponent
}
当我在某个地方调用myComponent.send()
而列表
属性未定义时,如何在stderr
中正确报告问题?我想查看调用send()
的*.qml文件名和行号,或者查看创建myComponent
的行号
有没有合适的方法可以获取QML堆栈跟踪或生成
QQmlError
或引发将由QML引擎处理的异常?必须使用一些私有的东西
带幻灯片和代码的Git存储库:
短版
添加到CMakeLists.txt
:
include_directories(${Qt5Quick_PRIVATE_INCLUDE_DIRS})
在Q\u可调用的
函数或插槽中添加一些QV8引擎内容:
#include <QtQml>
#include <private/qv4engine_p.h>
#include <private/qv8engine_p.h>
void Logger::log(const QString &message)
{
const QV4::StackFrame frame = QV8Engine::getV4(m_engine)->currentStackFrame();
QMessageLogger(qPrintable(frame.source),
frame.line,
qPrintable(frame.function)).warning("%s", qPrintable(message));
}
还可以将消息模式设置为实际显示行号(在main.cpp
开头的某个地方可以):
必须使用一些私人物品 带幻灯片和代码的Git存储库: 短版 添加到
CMakeLists.txt
:
include_directories(${Qt5Quick_PRIVATE_INCLUDE_DIRS})
在Q\u可调用的
函数或插槽中添加一些QV8引擎内容:
#include <QtQml>
#include <private/qv4engine_p.h>
#include <private/qv8engine_p.h>
void Logger::log(const QString &message)
{
const QV4::StackFrame frame = QV8Engine::getV4(m_engine)->currentStackFrame();
QMessageLogger(qPrintable(frame.source),
frame.line,
qPrintable(frame.function)).warning("%s", qPrintable(message));
}
还可以将消息模式设置为实际显示行号(在main.cpp
开头的某个地方可以):
您可以
qmlEngine(this)->评估引发异常的javascript片段,假设this
是您的组件最终派生自QObject
。它是qmlEngine的新实例吗?我认为它不会在该代码段之外显示任何行号。您可以qmlEngine(this)->评估出现异常的javascript代码段,假设this
是您的组件最终从QObject
派生而来。它是qmlEngine的新实例吗?我认为它不会在代码片段之外显示任何行号。