私が過去にそのようなことをした方法は、他のすべてのボタンを選択解除するように信号を送るボタンクラスで信号を作成することです。
そのため、すべてのオブジェクトへのポインターを持つウィジェットは、1 対 1 のシグナルのシグナルと、オブジェクトの選択を解除するシグナルとを接続します。
必要なスケルトン クラスを次に示します。
class Button
{
signals:
void selected(Button *);
slot:
void deselect(Button *);
}
class ButtonContainer
{
public:
void addButton(Button *)
signals:
void buttonSelected(Button *);
}
ボタンを追加するときは、次の方法でコンテナに接続します。
QObject::connect(button, SIGNAL(selected(Button *)),
buttonContainer, SIGNAL(buttonSelected(Button *)));
QObject::connect(buttonContainer, SIGNAL(buttonSelected(Button *)),
button, SLOT(deselect(Button *)));
マウス プレス イベントが発生すると、「選択した」スタイルシートを適用した後に次の信号を送信します。
emit selected(this);
選択解除スロットにこれを入れます:
void Button::deselect(Button * selectedButton)
{
if(this != selectedButton)
{
// apply stylesheet for deselecting if it was previously selected
}
}
それが役立つことを願っています。
ところで、スタイルシートをあまり頻繁に設定していないことを確認してください。大規模なテストは行っていませんが、Qt の少なくとも一部のバージョンでは、QList の制限を超える可能性があります。これらには、頻繁にスタイルを変更するために使用できる動的プロパティがあります。
QList: メモリ不足