【问题标题】:Can I use a string as an index in a QComboBox?我可以在 QComboBox 中使用字符串作为索引吗?
【发布时间】:2017-03-22 23:23:06
【问题描述】:

我目前正在调用 Oracle 中的存储过程来填充 PYQT 中的 QComboBox。数据如下所示:

代码:'PAY_COMP' 描述:“支付公司”

代码:'USER_COMP' 描述:'用户公司'

我想在组合框中显示描述,但想使用代码作为索引,这可能吗?原因是,当用户选择“支付公司”时,我想将“PAY_COMP”发送到后端进行更新。

或者还有其他方法可以实现吗?

【问题讨论】:

    标签: qt qcombobox


    【解决方案1】:

    我不了解 python,但至少在 C++ 中,您可以将 QVariant 数据附加到组合框中的每个元素。 QVariant 几乎可以是所有类型,例如字符串或枚举。

    在填充组合框时,我会使用成员函数void QComboBox::addItem(const QString & text, const QVariant & userData = QVariant())。然后当用户选择了一个项目并且我知道组合框的当前索引时,我可以使用QVariant QComboBox::itemData(int index, int role = Qt::UserRole) const来获取该项目的QVariant,然后可以将其转换为包含数据的实际类型有,例如使用QString QVariant::toString() const

    组合框还提供了一种获取特定数据项索引的方法:int QComboBox::findData(const QVariant & data, int role = Qt::UserRole, Qt::MatchFlags flags = static_cast<Qt::MatchFlags> ( Qt::MatchExactly | Qt::MatchCaseSensitive )) const

    现在您只需将其传输到 python,但我认为界面将是相同的。

    【讨论】:

    • 感谢您非常详细的回复,在您的帮助下,我得以完成这项工作。再次感谢!
    • 另外,不确定我是否设置正确,当在 comboChanged 中时,得到一些奇怪的结果:#Weight for index in range(rowCount): combo = QtWidgets.QComboBox() combo.currentIndexChanged.connect (self.comboChanged) for t in comboBoxWeight: combo.addItem(t[0], QVariant(t[1])) self.tableWidgetCode.setCellWidget(index,0,combo)
    • 好的,还有一个问题。现在我能够使用“代码”和“描述”设置组合框,一旦从过程中获取数据,我需要在适当的行中设置数据。因此,如果我得到从 proc 返回的数据“PAY_COMP”,我该如何在组合框中的表中设置它以显示“付款公司”?我假设我需要使用类似的东西: self.tableWidgetCode.cellWidget(0,0).setItemData(row) 但我无法让它工作...... @user
    • 我实际上并不确定您要做什么。如果您想要将组合框的选定项更改为特定项,则可以使用QComboBox::findData获取相应项的索引(如前所述)。然后您可以使用QComboBox::setCurrentIndex 将此项设置为选中项。例如:comboBox->setCurrentIndex(comboBox->findData(PAY_COMP)).
    • 是的,在您的帮助下,它现在可以正常工作了,谢谢。现在唯一的问题是当调用 comboChanged() 函数时,我需要获取 currentRow 并且如果用户继续选择 tbale 中的组合框, currentRow() 永远不会改变。我必须单击另一列才能更改它。谷歌搜索了这个,但结果是空的……@user
    猜你喜欢
    • 2010-09-29
    • 2016-07-11
    • 2014-12-21
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 2012-02-22
    相关资源
    最近更新 更多