【发布时间】:2017-03-22 23:23:06
【问题描述】:
我目前正在调用 Oracle 中的存储过程来填充 PYQT 中的 QComboBox。数据如下所示:
代码:'PAY_COMP' 描述:“支付公司”
代码:'USER_COMP' 描述:'用户公司'
我想在组合框中显示描述,但想使用代码作为索引,这可能吗?原因是,当用户选择“支付公司”时,我想将“PAY_COMP”发送到后端进行更新。
或者还有其他方法可以实现吗?
【问题讨论】:
我目前正在调用 Oracle 中的存储过程来填充 PYQT 中的 QComboBox。数据如下所示:
代码:'PAY_COMP' 描述:“支付公司”
代码:'USER_COMP' 描述:'用户公司'
我想在组合框中显示描述,但想使用代码作为索引,这可能吗?原因是,当用户选择“支付公司”时,我想将“PAY_COMP”发送到后端进行更新。
或者还有其他方法可以实现吗?
【问题讨论】:
我不了解 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,但我认为界面将是相同的。
【讨论】:
QComboBox::findData获取相应项的索引(如前所述)。然后您可以使用QComboBox::setCurrentIndex 将此项设置为选中项。例如:comboBox->setCurrentIndex(comboBox->findData(PAY_COMP)).