3

私のプロジェクトでは、40 個QPushButtonすべてを次のQButtonGroupように配置しています。

QButtonGroup* group = new QButtonGroup(this);
group->addButton(ui->slot_0);
group->addButton(ui->slot_1);
//...
group->addButton(ui->slot_38);
group->addButton(ui->slot_39);

各ボタンはチェックできるQPushButtonようにしました。そうすれば、一度に 1 つのボタンだけをチェックできます。すべてうまく機能しますが、ボタンの 1 つがチェックされたときに「スロットを作成」するにはどうすればよいですか? 各ボタンに 1 つずつ、40 の異なるスロットを用意して、すべてが本質的に同じことをするようにしたくありません。QButtonGroup入れたまま使う方法はありますか?

4

2 に答える 2

3

Jamin と Nikos が述べたように、QButtonGroup によって発行されたシグナルを処理するには、独自のスロットを作成する必要があります。それは次のようなものかもしれません:

ヘッダー ファイル内:

public slots:

void buttonWasClicked(int);

*.cpp ファイル:

void MainWindow::buttonWasClicked(int buttonID)
{
    cout << "You have clicked button: " << buttonID << endl;
}

また、MainWindow の作成を担当するコード (つまり、コンストラクターで、必ずしも必要ではありません) には、次の行が必要です。

    connect(group, SIGNAL(buttonClicked(int)), this, SLOT(buttonWasClicked(int)));

Qt5 以降、接続構文が変更されていることに注意してください。ここで使用した構文は Qt4 のものです。まだ機能しますが、現在は非推奨です (詳細については、Qt 5 の新しいシグナル スロット構文を参照してください)。さらに、私が選択したものよりもニーズに合った利用可能なシグナルが他にもあるため、QButtonGroup クラスのリファレンスを参照することをお勧めします。

ブラジル

于 2013-07-15T07:54:57.430 に答える