大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

Qtプログラミング-ソートダイアログのQComboBox

株式会社クローバーフィールドの経営理念
著者:津路高広
公開日:2019/08/29
最終更新日:2019/08/29
カテゴリー:技術情報

津路です。
前回に引き続き、ソートダイアログの拡張ボタンをつけて、Comboにデータをプログラムから設定します。
前回では、&MoreボタンというQPushButtonをクリックするかalt+Mを押して、他のグループボックスの表示をtoggleしていました。
このダイアログには、3つのQComboBoxがあります。1番目が、カラムの第一条件です。2番目と3番目は、最初は隠しておきます。
QLayout::SetFixedSizeによって、レイアウトサイズを固定しておきます。
関数setColumnRangeを作成して、それぞれのComboの初期設定をします。

#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シグナルと独自スロットを接続します。

connect(moreButton, SIGNAL(clicked()), this, SLOT(on_more_toggled()));

void SortDialog::on_more_toggled()
{
    if(secondaryGroupBox->isVisible())
    moreButton->setText("&Advanced<<<");
    else
    moreButton->setText("&Adanced>>>");
}

画像を見て頂ければ、内容がお分かりかと思います。

    上に戻る