c++ - 从 QML 动态创建 C++ 对象

标签 c++ qt qml qtquick2 qt-quick

我想动态创建一个C++来自 QML 的对象.我创建了一个 QObject派生类名为 Car并将其暴露给QML使用 qmlRegisterType<Car>("org.qtproject.models", 1, 0, "Car"); .里面QML我能够实例化 Car像这样的对象:

Car {
    id : car_1
    carName : "H1"
    carBrand : "Hummer"
    carPrice : 125000
} 

然后使用 car_1对象并将其传递回 C++如果我需要的话,很容易。但我想要的是创建一个 CarQML 中动态对象,所以我可以将它传递回 C++ .

我试过:

MouseArea
{
    anchors.fill: parent
    onClicked: {
        component = Qt.createQmlObject("Car { id: car_1; carName : \"H1\"; carBrand : \"Hummer\"; carPrice : 125000; }",
                                       parent, "dynamicSnippet1");

        myCarModel.appendRowFromQml(component);
    }
}

但运气不好。使用静态方法,效果很好:

MouseArea
{
    anchors.fill: parent
    onClicked: {
        myCarModel.appendRowFromQml(car_1);
    }
}

有没有办法动态创建一个C++来自 QML 的对象边?我也无法使用 Qt.createComponent因为没有 *.qml文件中 Car被定义为 CarC++ 中定义.

最佳答案

您可以使用 Loader .

像这样:

Loader {
   id: carLoader
   active: false
   sourceComponent:
   Car {
       id : car_1
       carName : "H1"
       carBrand : "Hummer"
       carPrice : 125000
   } 

MouseArea
{
    anchors.fill: parent
    onClicked: carLoader.active:true
}

关于c++ - 从 QML 动态创建 C++ 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37253429/

相关文章:

c++ - qDebug 和 QString const 引用的问题

c++ - Qt 5.4,数据库打不开报错

qt - Qml 菜单弹出延迟

qt - 如何使用video 5.12 qt qml播放视频?

C++ 代码输出负值

c++ - 类中的全局和外部

c++ - 将 QTableView 添加到 QComboBox

c++ - QMenuBar 和 QMenu 在 Mac OS X 中不显示

C++ 线程和 Promise : attempting to reference a deleted function

qt - QML:如何隐藏子菜单?