我正在尝试将现有 Qt QWidget 应用程序的一部分转换为 QML。
为此,我QQuickWidget
按照此处提到的代码使用:
QQuickWidget *view = new QQuickWidget();
view->setSource(QUrl::fromLocalFile(":/qml/spinner.qml"));
view->show();
我在主小部件的构造函数中有上述代码。
该代码有时有效。但其他时候,它在这一行抛出异常:
QQuickWidget *view = new QQuickWidget();
异常说:
app.exe 中 0x00007FFC84314B59 处未处理的异常:Microsoft C++ 异常:std::bad_alloc 在内存位置 0x000000338BCFDEE0。
我不知道为什么会发生异常或为什么它有时会起作用。到目前为止,我还没有找到一种模式,它什么时候起作用,什么时候不起作用。
到目前为止我还尝试过什么:
QQuickView
(现在在 QQuickView 构造函数中抛出异常)据我了解,当系统在低 RAM 上运行时会发生此异常。但是我的系统中有很多可用的 RAM。
如果您有任何输入,请提供。
QT 版本为:5.15.2,平台为:Windows。
在处理以下警告后,问题已得到修复,此处提到:
警告: argc 和 argv 引用的数据必须在 QApplication 对象的整个生命周期内保持有效。此外,argc 必须大于零且 argv 必须包含至少一个有效字符串。
我们没有通过argc
引用传递给QApplication
构造函数,在处理之后,修复了这个问题。
QQuickWidget
和的具体关系我不清楚QApplication
,但是Mac平台QQuickWidget崩溃的调用栈提示有关系,之后我们发现了argc
不引用传递的问题。
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libsystem_platform.dylib 0x00007fff6752de52 _platform_strlen + 18
1 org.qt-project.QtCore 0x00000001039e66b2 QCoreApplication::arguments() + 130
2 org.qt-project.QtQuick 0x0000000104c65a8e contextFactory() + 46
3 org.qt-project.QtQuick 0x0000000104c661fb QSGContext::createDefaultContext() + 11
4 org.qt-project.QtQuick 0x0000000104d7ba8d QQuickRenderControl::QQuickRenderControl(QObject*) + 93
5 org.qt-project.QtQuickWidgets 0x00000001037d1ed3 QQuickWidgetPrivate::init(QQmlEngine*) + 51
6 com.logi.bolt.app 0x0000000101759066 main + 4134
7 libdyld.dylib 0x00007fff67337cc9 start + 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句