这种加载C ++ QStringList作为QML ListView模型的方法有什么问题?

时间:2016-03-18 21:35:58

标签: qt qml

此程序无提示失败,在调试模式或发布模式下没有显示消息,窗口未显示,您可以看到在任务管理器中运行的program.exe。到底是怎么回事 ?怎么解决?为什么会失败?为什么没有消息出现?

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();
}

1 个答案:

答案 0 :(得分:2)

代码不会在C ++和QML中创建窗口。

使用QtQuick创建窗口有两种方法:

  1. 不使用QQmlApplicationEngine,而是使用继承自QQuickView的C ++类QQuickWindow。记得致电show()。这就是https://doc.qt.io/qt-5/qtquick-models-stringlistmodel-example.html的例子。

  2. 如果您使用QQmlApplicationEngine,则需要在QML文件中的某处Window。请记住将visible设置为true。 QQmlApplicationEngine不会从任何窗口基类继承,这就是需要在QML中创建窗口的原因。