Qt DesignerでグラフィカルにデザインしたQDialogがあります。いくつかのプレースホルダテキストをデザイン時に配置し、実行時に実際の内容をロードしたい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
私の問題を最適に解決する方法で私自身の質問に答えるために、2つの賛成の投票があった。私がここで間違っていたことを知りたいのは非常に興味があります。 –