32個のスロットを宣言せずに、32個のボタンのpressed()信号を単一の機能に接続するにはどうすればよいですか?
-
05-07-2019 - |
質問
ウィジェットがあり、その中に32個のボタンがあります。どのボタンを押したかに応じてパラメーターが変わる関数を呼び出すには、各ボタンのPressed()シグナルをスロットに接続する必要があります。今のところ、on_QPushButtonName_pressed()の形式で32個のスロットを追加することでそれを行いました。 しかし、それは多くのスロットです。私はそれを行うことができる別の方法がより小さいかどうか疑問に思っていました。同様のことをしましたが、クラスのコードで新しい信号を作成できるようにカスタムウィジェットを使用していましたが、ボタンが1つだけのカスタムウィジェットを作成しないようにしたいと思います。
解決
QSignalMapperクラスを使用します。ドキュメント- http://doc.qt.io/qt-5/qsignalmapper.html -目的に非常に近い例があります。
他のヒント
別の可能性:スロットを1つだけ作成し、 sender()
を呼び出して結果をオンにします。
Rohanが述べたように、sender()はちょっとしたハックなので、QSignalMapperが推奨されるソリューションです。その利点は、使いやすいことです。
所属していません StackOverflow