当尝试使用一些Qt-5类时,我遇到了崩溃。我首先发现了这种尝试使用的方法QFileSystemModel
。尝试setRootPath
立即致电会导致崩溃。调用栈没有多大帮助(全部都是汇编代码),只是QFileIconProvider::icon()
在seg错误发生之前调用的最后一个函数。
因此,接下来我尝试QFileIconProvider
手动使用,并且-毫不奇怪-它也使程序崩溃了。
我正在使用QtCreator 4,项目类型为“ Qt Quick Application”。相反,当我创建“ Qt Widgets Application”类型的项目时,可以同时使用QFileIconProvider
并且QFileSystemModel
没有问题。
这是我的主意。我对Qt环境的了解不足,无法知道两种类型的项目之间的哪些差异可能导致seg错误。
两个项目都使用相同的Kit(相同的gcc,相同的Qt 5.6.1)和QtCreator设置的默认设置。
这是我的project.pro文件:
TEMPLATE = app
QT += qml quick widgets //default .pro file except for widgets
CONFIG += c++11
SOURCES += main.cpp
RESOURCES += qml.qrc
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =
# Default rules for deployment.
include(deployment.pri)
这是main.cpp:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QDir>
#include <QFileSystemModel>
#include <QQmlContext>
#include <QFileIconProvider>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
//If trying to use QFileSystemMode...
QFileSystemModel model;
model.setRootPath("/somefolder/"); //..the crash happens here
//Attempting to use QFileIconProvider also crashes
//QFileIconProvider fip;
//fip.icon( QFileInfo("/somefolder/somefile") ); //<- here
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
我将不胜感激,对于如何调试该烂摊子的任何帮助或指点。
听起来QFileSystemModel
很令人困惑,它是QtWidgets的一部分,因此要求您创建和实例,QApplication
而不是QGuiApplication
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句