【问题标题】:How can I add item data to QComboBox from Qt Designer/.ui file如何将项目数据从 Qt Designer/.ui 文件添加到 QComboBox
【发布时间】:2016-05-10 14:20:15
【问题描述】:

我正在使用 Qt Designer(实际上是 Qt Creator,但特别是从 Qt Designer 派生的部分),并且我已将一些 QComboBox 项目添加到具有恒定项目列表的对话框中。我需要将组合框中的项目映射到字符串(与显示的字符串不同)。我想出的最好的主意是使用QComboBox::itemData 函数从选定的项目中获取所需的字符串,但是我无法将关联的字符串添加到项目中。我已经查看了整个设计器,但还没有看到添加用户数据的方法。有没有我想念的?如果需要,我也愿意直接编辑 .ui 文件的 XML 以添加属性,但我不知道属性名称是什么。有没有我可以在这里使用的?目前我正在代码中添加数据,但对我来说这似乎不是正确的解决方案。

【问题讨论】:

  • 鉴于项目数据是 QVariant,这似乎不太可能在 Qt Designer 中实现。而且我不认为在代码中填充组合是错误的或不寻常的。
  • 我不确定。几乎任何属性都是 QVariant,类型选择决定了 QVariant 中的值类型。这就是它使用动态属性的方式,例如,如果您在设计器中添加一个属性并使用 QObject::property 访问它。至于为什么我不想将它放在代码文件中,将项目实例化和数据实例化分开似乎是一种不好的做法,因为它会使添加/编辑项目更加麻烦。
  • 数据必须序列化为xml,这就是为什么我建议不太可能支持它(但原则上并非不可能)。恐怕我不明白为什么您认为在代码中填充组合框是“不好的做法”或很麻烦。
  • 在代码中填充组合框。组合框的项目正在 .ui 文件中设置。它是在代码中设置的与之关联的数据。因此项目及其文本在 .ui 文件中,数据在单独的源文件中。
  • 啊 - 我实际上是在建议您在代码中填充文本 数据。我同意单独填充它们不是一个好的解决方案。

标签: qt designer qt-designer qcombobox


【解决方案1】:

好的,所以我实际上浏览了 uic 的源代码,找到了处理 QComboBox 的地方。从 Qt 的当前版本(所以 5.5.1)开始,不支持通过 .ui 文件设置项目的数据属性。我可能会将此作为功能请求,但目前不受支持。

【讨论】:

    【解决方案2】:

    编辑:因为这个答案似乎得到了更多的支持。我会把它留在这里,因为很多人似乎在谷歌搜索他们的问题时找到了这个答案。下面的答案更适合OP的问题。

    在 QT Designer 5.6.2 中,您可以双击组合框来添加项目。

    【讨论】:

    • 谢谢,这个答案很有用,而且是最新的。
    • 这回答了错误的问题。是的,您可以通过这种方式向 QComboBox 添加更多元素,但这不是我要问的。我在询问为已添加的项目设置项目数据。 doc.qt.io/qt-5/qcombobox.html#setItemData Qt Designer 不支持设置您自己的 Qt::UserRole 数据。您只能编辑每个元素的文本和图标数据。
    【解决方案3】:

    在运行时添加项目:

    ui.ComboBox.addItem('My New Combo Box Item')
    

    使用字典将组合框映射到字符串:

    lookup_dictionary[ui.ComboBox.currentText()]
    

    【讨论】:

      【解决方案4】:

      这是在每个 ComboBox 项中存储除文本之外的数据的方法。

      item_text = 'This is my text'
      item_data = []
      your_comboBox.addItem(item_text, item_data)
      

      要检索数据:

      item_index = 0
      y_data = your_comboBox.itemData(item_index)
      

      【讨论】:

        【解决方案5】:

        它不受支持,不幸的是,它不太可能实现。见:https://bugreports.qt.io/browse/QTBUG-50823

        “这超出了 UI 设计工具的范围。”

        【讨论】:

          猜你喜欢
          • 2021-04-12
          • 2017-09-05
          • 1970-01-01
          • 1970-01-01
          • 2012-01-15
          • 1970-01-01
          • 1970-01-01
          • 2023-03-16
          相关资源
          最近更新 更多