2016-03-18 8 views
1

このプログラムはサイレントモードで失敗し、デバッグモードまたはリリースモードではメッセージは表示されず、ウィンドウは表示されませんが、タスクマネージャで実行中のprogram.exeが表示されます。何が起こっている ?どのようにそれを修正するには?それはなぜ失敗するのですか?なぜメッセージが表示されないのですか?QML ListViewのモデルとしてC++ QStringListをロードするこの方法で何が問題になりますか?

QMLインタフェースファイル

//main.qml 
import QtQuick 2.5 

ListView { 
    width: 100; height: 100 

    model: myModel 
    delegate: Rectangle { 
     height: 25 
     width: 100 
     Text { text: modelData } 
    } 
} 

は、C++、メインファイル

// main.cpp 
#include <QGuiApplication> 
#include <QQmlApplicationEngine> 
#include <QQmlContext> 


int main(int argc, char *argv[]) 
{ 


    QGuiApplication app(argc, argv); 

    QStringList dataList; 
    dataList.append("item 1"); 
    dataList.append("item 2"); 
    dataList.append("item 3"); 
    dataList.append("item 4"); 
    dataList.append("item 5"); 


    QQmlApplicationEngine engine; 
    engine.rootContext()->setContextProperty("myModel",QVariant::fromValue(dataList)); 

    engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); 

    return app.exec(); 
} 

答えて

2

コードはC++にもQMLでもない、ウィンドウを作成しません。

QtQuickでウィンドウを作成するには、2つの方法があります。

  1. QQuickWindowから継承C++クラスQQuickViewを使用し、代わりにQQmlApplicationEngineを使用します。 show()に電話することを忘れないでください。これはhttps://doc.qt.io/qt-5/qtquick-models-stringlistmodel-example.htmlの例のようなものです。

  2. QQmlApplicationEngineを使用する場合は、WindowをQMLファイルのどこかに置く必要があります。 visibleをtrueに設定することを忘れないでください。 QQmlApplicationEngineは、どのウィンドウベースクラスも継承しないため、QMLでウィンドウを作成する必要があります。

+0

これは私の愚かなように見える、あなたの迅速な対応に感謝します。 –

+0

ウィンドウがデフォルトで表示されないのはなぜですか? –

+0

私は、QMLビューで動作するモデルクラスを設計できるようにしたいと考えています。私はそれらを作ってコンソールアプリケーションの下でそれらをテストすることはできますか?モデルクラスをテストするために作られた準備ができたコンソールクラスがありますか? –

関連する問題