3

私が取り組んでいる学校のグループ プロジェクトがあります。私のグループのメンバーは、75 個までのラジオ ボタンを持つウィンドウを作成しました。ボタンを押すと、それらすべてを強制的に「クリア」または「チェック解除」したいと考えています。

これを行う良い方法を知っている人はいますか?私は QObjectList を調べてきましたが、単純に QObjectList *children = new QObjectList(ui->groupBox->children()); を行うことはできません。QObjectListには次のメソッドがないように見えるため、forループを使用してそれらをループします..

私も次のようなことをしようとしました

QObjectList *children = new QObjectList(ui->groupBox->children());
for(QObject *iterator = children.first(); iterator!=NULL; children.pop_front()){
    iterator = children.first();
    iterator->at(0)->setCheckabled(false);
}

しかし iterator は QObject なので、ラジオボタンのように setCheckable は存在しません。

考え/ヒントをいただければ幸いです。

編集:同様の名前の変数を反復処理する方法についてもヒントを示します。たとえば、すべてのラジオボタンに RadioButton_1、RadioButton_2 などの名前を付けます。

4

2 に答える 2

3

QButtonGroupを使用し、排他的に設定します (一度に 1 つのラジオボタンのみがチェックされます)。また、チェックを外したい場合に備えて、現在チェックされているボタンも表示されます。(チェックされたボタンがまったくないように)。

また、おそらく変更したいのは「チェック可能」ではなく「チェック済み」プロパティであることに注意してください(falseは、ボタンをまったくチェック/チェック解除できないことを意味します)。

于 2011-04-08T17:22:56.543 に答える
1

使用したくない場合QButtonGroup(セットアップ作業が多すぎる、またはその他の理由で)、次のような繰り返しを使用します。

QListIterator<QObject *> i(ui->groupBox->children());
while (i.hasNext())
{
    QRadioButton* b = qobject_cast<QRadioButton*>( i.next() );
    if (b > 0 && b->isChecked()) {
        b->setAutoExclusive(false);
        b->setChecked(false);
        b->setAutoExclusive(true);
    }
}

ほとんどの場合、(上記のコード ブロックで行ったように) autoexclusive を操作して、すべてのラジオ ボタンをオフにする必要があります (@Kristofer の回答も参照してください: https://stackoverflow.com/a/9375491/1150303 ) 。

于 2015-07-11T10:07:57.390 に答える