Qtプログラミング-ソートダイアログのQComboBox
津路です。
前回に引き続き、ソートダイアログの拡張ボタンをつけて、Comboにデータをプログラムから設定します。
前回では、&MoreボタンというQPushButtonをクリックするかalt+Mを押して、他のグループボックスの表示をtoggleしていました。
このダイアログには、3つのQComboBoxがあります。1番目が、カラムの第一条件です。2番目と3番目は、最初は隠しておきます。
QLayout::SetFixedSizeによって、レイアウトサイズを固定しておきます。
関数setColumnRangeを作成して、それぞれのComboの初期設定をします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include <QtGui> #include "sortdialog.h" SortDialog::SortDialog(QWidget *parent) : QDialog(parent) { setupUi(this); secondaryGroupBox->hide(); tertiaryGroupBox->hide(); layout()->setSizeConstraint(QLayout::SetFixedSize); setColumnRange('A','Z'); } void SortDialog::setColumnRange(QChar first, QChar last) { primaryColumnCombo->clear(); secondaryColumnCombo->clear(); tertiaryColumnCombo->clear(); secondaryColumnCombo->addItem(tr("None")); tertiaryColumnCombo->addItem(tr("None")); primaryColumnCombo->setMinimumSize(secondaryColumnCombo->sizeHint()); QChar ch = first; while(ch <= last) { primaryColumnCombo->addItem(QString(ch)); secondaryColumnCombo->addItem(QString(ch)); tertiaryColumnCombo->addItem(QString(ch)); ch = ch.unicode() + 1; } } |
2番目、3番目には、未選択を示すNoneを先頭に入れておき、ループを回して、指定された範囲の文字列を追加します。
次に、QPushbuttonの&Moreでtoggleするだけでは面白くないので、Advanced>>>で拡張表示して、Advanced<<>>に変更します。
更に、moreButtonのclickedシグナルと独自スロットを接続します。
1 2 3 4 5 6 7 8 9 | connect(moreButton, SIGNAL(clicked()), this, SLOT(on_more_toggled())); void SortDialog::on_more_toggled() { if(secondaryGroupBox->isVisible()) moreButton->setText("&Advanced<<<"); else moreButton->setText("&Adanced>>>"); } |