2016-06-25 20 views
1

Qt-5クラスを使用しようとするとクラッシュします。私はこれを最初に発見しましたQFileSystemModelを使用しようとしました。 setRootPathに連絡しようとするとすぐにクラッシュします。呼び出しスタックはあまり役に立ちません(すべてがアセンブリコードです)。ただし、segフォルトが発生する前に最後に呼び出される関数はQFileIconProvider::icon()です。QtQuick 2アプリケーションでQt5クラスを使用している場合のセグメンテーションフォルト

次に、私はQFileIconProviderを手動で使ってみました。そして、驚くことはありません。それはまた、プログラムをクラッシュさせました。

私はQtCreator 4を使用しています。プロジェクトのタイプは「Qt Quick Application」です。代わりに "Qt Widgets Application"タイプのプロジェクトを作成すると、QFileIconProviderQFileSystemModelの両方を問題なく使用できます。

ここに私のアイデアがありません。私は、2つのタイプのプロジェクトの違いがseg faultにつながる可能性があることを知るためにQt環境について十分に知りません。

どちらのプロジェクトも同じキット(同じ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(); 
} 

私はその混乱をデバッグする方法についてどのようなヘルプやポインタをいただければと思います。

答えて

4

QFileSystemModelはQtWidgetsの一部であるため、QGuiApplicationの代わりにQApplicationを作成してインスタンスを作成する必要があります。

+0

特に、「QFileSystemModelにはGUIアプリケーションのインスタンスが必要です」という記述があるので、それは確かに混乱します。しかし、「QApplication」に切り替えると心に働くようになりました。ありがとうございました。 – s3rius

+2

ありがとうございます。私は修正を押しました:https://codereview.qt-project.org/#/c/163517/ – jpnurmi

関連する問題