从 C++ 填充 QtQuick QML 中定义的 QComboBox 的公认方法是什么?
What's the accepted way to fill a QComboBox defined in QtQuick QML, from C++?
我想从我的 C++ 代码填充 QML 中定义的 QComboBox。我看到了两种可能的方法:
- 从 C++ 代码定义一个列表(例如
QStringList
),并将其公开为 Q_ELEMENT
。然后通过说 model: backend.qlist
假设列表在 backend
中定义,从 C++ 访问该列表。或者
- 使用
view.rootObject()->findChild()
在C++代码中找到QComboBox。然后使用 addItem()
填充列表。
最佳做法是什么?
到目前为止第一个选项!
QML 代表 Qt Modeling 语言,遵循模型-视图架构,其中模型(此处为 C++)不应该了解视图(QML)。
第一个选项效果很好。实施很容易。从 C++ 端创建一个 return 列表的方法:
QVariantList getList()
{
QVariantList list;
list << "Op1";
list << "Op2";
list << "Op3";
return list;
}
然后像这样通过QML调用方法:
comboBoxReader.model = backend.getList()
我想从我的 C++ 代码填充 QML 中定义的 QComboBox。我看到了两种可能的方法:
- 从 C++ 代码定义一个列表(例如
QStringList
),并将其公开为Q_ELEMENT
。然后通过说model: backend.qlist
假设列表在backend
中定义,从 C++ 访问该列表。或者 - 使用
view.rootObject()->findChild()
在C++代码中找到QComboBox。然后使用addItem()
填充列表。
最佳做法是什么?
到目前为止第一个选项!
QML 代表 Qt Modeling 语言,遵循模型-视图架构,其中模型(此处为 C++)不应该了解视图(QML)。
第一个选项效果很好。实施很容易。从 C++ 端创建一个 return 列表的方法:
QVariantList getList()
{
QVariantList list;
list << "Op1";
list << "Op2";
list << "Op3";
return list;
}
然后像这样通过QML调用方法:
comboBoxReader.model = backend.getList()