【问题标题】:What's the accepted way to fill a QComboBox defined in QtQuick QML, from C++?从 C++ 填充 QtQuick QML 中定义的 QComboBox 的公认方法是什么?
【发布时间】:2020-11-27 15:08:54
【问题描述】:

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

  1. 从 C++ 代码中定义一个列表(例如 QStringList),并将其公开为 Q_ELEMENT。然后从 C++ 访问该列表,假设该列表在 backend 中定义,则说 model: backend.qlist。或者
  2. 使用view.rootObject()->findChild() 在 C++ 代码中查找 QComboBox。然后使用addItem() 填充列表。

什么是最佳实践?

【问题讨论】:

    标签: c++ qt qml qcombobox qstringlist


    【解决方案1】:

    到目前为止,第一个选项!

    QML 代表 Qt Modeling 语言,遵循模型-视图架构,其中模型(此处为 C++)不应该知道任何关于视图 (QML) 的信息。

    【讨论】:

    • 什么是最佳实践? 显然是一个基于意见的问题。 tag wiki 说:请不要回答可能会在以后关闭甚至删除的糟糕问题。我们的目标是在这个标签中实现高质量,因此我们不希望通过提供答案来鼓励糟糕的问题。
    • @scopchanov 你当然有道理,但我想我也有必要回答这个问题,因为第二个选项属于“有可能,为什么不使用它”的类别,虽然它肯定会导致糟糕的、不可维护的代码。但回想起来,我可能最好发表评论
    【解决方案2】:

    第一个选项效果很好。实施很容易。从 C++ 端创建一个返回列表的方法:

    QVariantList getList()
    {
        QVariantList list;
        
        list << "Op1";
        list << "Op2";
        list << "Op3";
               
        return list;
    }
    

    然后像这样通过 QML 调用方法:

    comboBoxReader.model = backend.getList()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-18
      • 2018-12-21
      • 2011-11-05
      相关资源
      最近更新 更多