2017-03-22 89 views
0

我正在調用Oracle中的存儲過程來在PYQT中填充QComboBox。數據顯示如下:我可以使用字符串作爲QComboBox中的索引嗎?

代碼:「PAY_COMP」 說明:「支付公司

代碼:「USER_COMP」 說明:「用戶企業」

我要顯示在說明書組合框,但想使用代碼作爲索引,這可能嗎?原因是,當用戶選擇「付款公司」時,我想發送'PAY_COMP'到後端進行更新。

或者還有其他的方法來實現這個?

回答

1

我不知道python,但至少在C++中,您可以將QVariant數據附加到組合框中的每個元素。 A 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

現在,你只需要的是轉移到蟒蛇,但我認爲該接口是相同的。

+0

感謝您提供非常詳細的回覆,在您的幫助下我能夠實現這一目標。再次感謝! – Goldglv

+0

另外,不知道如果我正確地設置的,裏面的時候comboChanged,得到了一些奇怪的結果: #Weight 有效範圍內的指數(rowCount時): \t組合= QtWidgets.QComboBox() combo.currentIndexChanged.connect( self.comboChanged) 對於t在comboBoxWeight: \t combo.addItem(T [0],的QVariant(T [1])) self.tableWidgetCode.setCellWidget(索引,0,二合一) – Goldglv

+0

好的,有一個問題。現在我可以用「代碼」和「描述」設置組合框,一旦我從過程中獲取數據,我需要將數據設置在適當的行中。 因此,如果我從proc返回的數據'PAY_COMP',我如何去設置它在組合框內的表中顯示'Payment Company'? 我假設我需要使用類似於: self.tableWidgetCode.cellWidget(0,0).setItemData(row)但我無法得到它的工作... @user – Goldglv

相關問題