Qt-5クラスを使用しようとするとクラッシュします。私はこれを最初に発見しましたQFileSystemModel
を使用しようとしました。 setRootPath
に連絡しようとするとすぐにクラッシュします。呼び出しスタックはあまり役に立ちません(すべてがアセンブリコードです)。ただし、segフォルトが発生する前に最後に呼び出される関数はQFileIconProvider::icon()
です。QtQuick 2アプリケーションでQt5クラスを使用している場合のセグメンテーションフォルト
次に、私はQFileIconProvider
を手動で使ってみました。そして、驚くことはありません。それはまた、プログラムをクラッシュさせました。
私はQtCreator 4を使用しています。プロジェクトのタイプは「Qt Quick Application」です。代わりに "Qt Widgets Application"タイプのプロジェクトを作成すると、QFileIconProvider
とQFileSystemModel
の両方を問題なく使用できます。
ここに私のアイデアがありません。私は、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();
}
私はその混乱をデバッグする方法についてどのようなヘルプやポインタをいただければと思います。
特に、「QFileSystemModelにはGUIアプリケーションのインスタンスが必要です」という記述があるので、それは確かに混乱します。しかし、「QApplication」に切り替えると心に働くようになりました。ありがとうございました。 – s3rius
ありがとうございます。私は修正を押しました:https://codereview.qt-project.org/#/c/163517/ – jpnurmi