我有一個QDialog,我用Qt Designer設計圖形化。它有一些QComboBox,我想在設計時放置一些佔位符文本,然後在運行時加載實際內容。如何在運行時指定QComboBox項目?
當然,我可以讓QComboBox得到創建,然後調用clear(),addItem()來覆蓋列表。但是如果這個QComboBox出現在幾個地方呢?什麼是保持乾爽的最佳方式?
我認爲合乎邏輯的方法是繼承QComboBox並在構造函數中設置內容,並將Qt Designer中的窗口小部件提升爲我的子類。不幸的是,uic調用構造函數很好,但之後不久調用retranslateUi(),它用設計時間條目替換內容。
我喜歡子類的想法,因爲它也允許我在更改組合框選擇時抽象行爲,但我看不到一種方法來確保我的動態內容生效。
舉例子類構造函數:由UIC生產
Sub_QComboBox::Sub_QComboBox(QWidget * parent) : QComboBox(parent)
{
QStringList entries = getEntryList();
clear();
for(int i=0; i<entries.size(); ++i)
addItem(entries[i], getDataForEntry(i));
}
所得ui_dialog.h:
void setupUi(QDialog *Dialog)
{
//<snip>
cbxMyComboBox = new Sub_QComboBox(parent);
//<snip>
retranslateUi(Dialog);
QMetaObject::connectSlotsByName(Dialog);
} // setupUi
void retranslateUi(QDialog *Dialog)
{
//<snip>
cbxLanguage->clear();
cbxLanguage->insertItems(0, QStringList()
//design time contents
);
//<snip>
} // retranslateUi
ouch,2以最佳解決我的問題的方式回答我自己的問題。很想知道我在這裏做錯了什麼。 –