我正在尝试将现有Qt QWidget应用程序的一部分转换为QML。
为此,我按照提到的QQuickWidget代码使用这里
QQuickWidget *view = new QQuickWidget();
view->setSource(QUrl::fromLocalFile(":/qml/spinner.qml"));
view->show();我的主小部件的构造函数中有上面的代码。
代码有时会起作用。但其他时候,它会在这一行中抛出异常:
QQuickWidget *view = new QQuickWidget();例外说:
App.exe中0x00007FFC84314B59处的未处理异常: C++异常:内存位置为0x000000338BCFDEE 0的std::bad_alloc。
我不知道为什么会发生这种异常,也不知道为什么有时会起作用。到目前为止,我还没有找到一个模式,在什么时候起作用,什么时候不起作用。
到目前为止,我还尝试过什么:
QQuickView (现在在QQuickView构造函数中抛出异常)据我所知,这种异常发生在系统在低RAM上运行时。但我的系统中有很多内存是免费的。
如果有,请提供任何输入。
QT版本为: 5.15.2,平台为: Windows。
发布于 2021-05-26 04:43:42
问题已经解决,在处理了下面的警告后,提到了这里
警告: argc和argv引用的数据必须在QApplication对象的整个生命周期内有效。此外,argc必须大于零,argv必须至少包含一个有效的字符串。
我们没有通过引用argc传递QApplication构造函数,在被处理之后,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 + 1https://stackoverflow.com/questions/67436102
复制相似问题