如何从Qt Designer/.ui文件将项目数据添加到QComboBox

如何从Qt Designer/.ui文件将项目数据添加到QComboBox,qt,designer,qt-designer,qcombobox,Qt,Designer,Qt Designer,Qcombobox,我正在使用Qt设计器(实际上是Qt-Creator,但具体来说是从Qt-Designer派生的部分),并且我在一个对话框中添加了一些QComboBox项,其中包含一个恒定的项列表。我需要将组合框中的项目映射到字符串(与显示的字符串不同)。我想到的最好的方法是使用QComboBox::itemData函数从所选项目中获取所需的字符串,但是我在将相关字符串添加到项目中时遇到了问题。我已经浏览了整个设计器,还没有找到添加用户数据的方法。有没有一个我错过了?如果需要的话,我也愿意直接编辑.ui文件的XM

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

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

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

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

在运行时添加项目: 使用字典将组合框映射到字符串:
lookup\u字典[ui.ComboBox.currentText()]

这是如何在每个组合框项目中存储除文本外的数据

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)

这似乎不太可能在Qt设计器中实现,因为项数据是QVariant。我不认为用代码填充组合是错误的或不寻常的。我不确定这一点。几乎所有属性都是QVariant,类型选择决定了QVariant中的值类型。这就是它处理动态属性的方式,例如在设计器中添加属性并使用QObject::property访问它。至于我为什么不想将其放在代码文件中,将项目实例化和数据实例化分开似乎是一种不好的做法,因为这会使添加/编辑项目更加麻烦。数据必须序列化为xml,这就是为什么我建议不太可能支持它(但原则上并非不可能)。恐怕我不明白为什么你认为在代码中填充组合框是“糟糕的做法”或是很麻烦的。我不是在代码中填充组合框。组合框的项目正在.ui文件中设置。在代码中设置的是与其关联的数据。所以项目和它们的文本在.ui文件中,数据在一个单独的源文件中。啊-我实际上是建议您在代码中填充文本和数据。我同意单独填充它们不是一个好的解决方案。谢谢,这个答案很有用,而且它更为最新。这回答了错误的问题。是的,您可以通过这种方式向QComboBox添加更多元素,但这不是我要问的。我问的是为已经添加的项目设置项目数据。Qt设计器不支持设置自己的Qt::UserRole数据。只能编辑每个元素的文本和图标数据。
item_index = 0
y_data = your_comboBox.itemData(item_index)