【问题标题】:Segmentation Fault when using some Qt5 classes in a QtQuick 2 application在 QtQuick 2 应用程序中使用某些 Qt5 类时出现分段错误
【发布时间】:2016-06-25 19:24:17
【问题描述】:

在尝试使用某些 Qt-5 类时,我遇到了崩溃。我第一次发现这个试图使用QFileSystemModel。尝试调用setRootPath 会立即导致崩溃。除了 QFileIconProvider::icon() 是发生 seg 错误之前调用的最后一个函数之外,调用堆栈没有多大帮助(全部是汇编代码)。

接下来我尝试手动使用QFileIconProvider,结果——不出所料——它也使程序崩溃了。

我使用的是 QtCreator 4,项目类型是“Qt Quick Application”。当我创建一个“Qt Widgets Application”类型的项目时,我可以毫无问题地同时使用QFileIconProviderQFileSystemModel

这就是我没有想法的地方。我对 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();
}

如果有任何关于如何调试该混乱的帮助或指示,我将不胜感激。

【问题讨论】:

    标签: c++ qt qt5 qtquick2


    【解决方案1】:

    虽然听起来令人困惑,但QFileSystemModel 是 QtWidgets 的一部分,因此需要您创建 QApplication 的实例而不是 QGuiApplication

    【讨论】:

    • 这确实令人困惑,尤其是因为文档声明“QFileSystemModel 需要一个 GUI 应用程序的实例”。但是切换到QApplication 让它在心跳中工作,所以谢谢。
    • 感谢您提出这个问题。我已经修复了:codereview.qt-project.org/#/c/163517
    猜你喜欢
    • 2017-07-01
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 2015-06-23
    • 2017-04-17
    • 2013-11-21
    相关资源
    最近更新 更多