2

3 つのQRadioButtonsと 2 つのチェック可能なQGroupBoxesのグループがあり、これらはすべて相互に排他的である必要があります。これを自動的に処理するためにラジオ ボタンをQButtonGroupに追加する便利さが気に入っていますが、QGroupBox をボタン グループに追加する方法がわかりません。QAbstractButton から継承されておらず、アクセスが見つからないためです。そのチェックボックスに。

例えば、

QRadioButton* rb1 = new QRadioButton("Button1");
QRadioButton* rb2 = new QRadioButton("Button2");
QRadioButton* rb3 = new QRadioButton("Button3");
QGroupBox* gb1 = new QGroupBox;
gb1->setCheckable(true);
QGroupBox* gb2 = new QGroupBox;
gb2->setCheckable(true);
QRadioButton* rb1 = new QRadioButton("Button1");

QButtonGroup* grp = new QButtonGroup;
grp->addButton(rb1);
grp->addButton(rb2);
grp->addButton(rb3);
grp->addButton(gb1);   //these two fail
grp->addButton(gb2);

これを達成する簡単な方法はありますか?QGroupBox の clicked() シグナルに接続できることはわかっていますが、それよりもきれいにこれを行います。

4

1 に答える 1

0

QAbstractButton 派生クラスのみを QButtonGroup インスタンスに追加できます。したがって、あなたの場合、 QGroupBox を排他的なアイテムの1つとして扱いたい場合は、自分で実装する必要があると思います。上記のウィジェットのすべての SIGNAL を同じ SLOT に接続し、その SLOT で、s​​ender 関数を使用してチェック済み/未チェックのウィジェットを更新できます。

QObject* object = sender();

if ( object == groupBox1 )
{
    // ...
}
else if ( object == groupBox1 )
{
    // ...

しかし、多くの場所でこれを行う必要がある場合は、この目的のためにある種のヘルパー クラスを実装する必要があります。

于 2015-04-28T22:47:49.310 に答える