从 C++ 填充 QtQuick QML 中定义的 QComboBox 的公认方法是什么?

What's the accepted way to fill a QComboBox defined in QtQuick QML, from C++?

我想从我的 C++ 代码填充 QML 中定义的 QComboBox。我看到了两种可能的方法:

  1. 从 C++ 代码定义一个列表(例如 QStringList),并将其公开为 Q_ELEMENT。然后通过说 model: backend.qlist 假设列表在 backend 中定义,从 C++ 访问该列表。或者
  2. 使用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()