【发布时间】:2016-06-25 19:24:17
【问题描述】:
在尝试使用某些 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();
}
如果有任何关于如何调试该混乱的帮助或指示,我将不胜感激。
【问题讨论】: