【问题标题】:Dynamically generated ListView doesn't populate based on its model动态生成的 ListView 不会根据其模型进行填充
【发布时间】:2017-05-19 22:45:06
【问题描述】:

我通过向 Qt.createQmlObject 发送一个字符串来手动创建一个组合框,如下所示:

var newQML = "ComboBox {\n";
newQML += "  model: ListModel {\n"
newQML += "    ListElement {\n"
newQML += "      name: \"One\"\n"
newQML += "    }\n"
newQML += "  }\n"
newQML += "}\n"

var cBox = Qt.createQmlObject(newQML)

但是,组合框不会填充其 ListModel 中的条目(它只是保持为空。)我还尝试在要实例化的组件中创建一个 ListModel,给它一个 id,然后尝试引用该 id在我的代码中是这样的:

var newQML = "ComboBox {\n";
newQML += "  model: sampleModel\n"
newQML += "}\n"

var cBox = Qt.createQmlObject(newQML)

但是,这也不起作用。请让我知道在 QML 中动态实例化和填充 ComboBox 的正确方法。

【问题讨论】:

    标签: qt user-interface dynamic combobox qml


    【解决方案1】:

    首先,导入语句应该包含在传递给Qt.createQmlObject 的字符串中。由于你使用ListModelComboBox,你应该在newQML中导入QtQuickQtQuick.Controls

    var newQML = "import QtQuick 2.0; \n";
    newQML += "import QtQuick.Controls 2.0\n";
    newQML += "ComboBox {\n";
    newQML += "  model: ListModel {\n"
    newQML += "    ListElement {\n"
    newQML += "      name: \"One\"\n"
    newQML += "    }\n"
    newQML += "  }\n"
    newQML += "}\n"
    

    接下来,您需要将父项传递给Qt.createQmlObject 以指定绘制组合框的位置。例如,如果您要将组合框放在mainItem 中,则将newQMLmainItem 都传递给Qt.createQmlObject

    Item {
        id: mainItem
        width: 200; height: 200
    
        Button {
            anchors.centerIn: parent
            onClicked: {
                var newQML = "import QtQuick 2.0; \n";
                newQML += "import QtQuick.Controls 2.0\n";
                //...
    
                var cBox = Qt.createQmlObject(newQML, mainItem);
            }
        }
    }
    

    但是,如果您使用来自 QtQuick.Controls 1.x 的组合框,则上述方法不起作用,程序会为您提供一个空的组合框(在 Qt 5.8 MSVC 2015 中测试)。一个简单的解决方法是在创建对象后分配模型:

    var newQML = "import QtQuick 2.7; \n";
    newQML += "import QtQuick.Controls 1.4\n";
    newQML += "ComboBox {\n";
    newQML += "}\n"
    
    var cBox = Qt.createQmlObject(newQML, mainItem)
    cBox.model = sampleModel;
    

    但我认为最好改用QtQuick.Controls 2Qt.createComponent

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多