問題:
排他的にチェック(クリック)されるボタンのQVBoxLayoutを含むクラスをC++で作成しています。各ボタンは、ボタンのタイトルだけでなく、より多くのデータを含むクライアントオブジェクトを表します。新しいクラス「SelectionLayout」は、いずれかのボタンがチェックされたときにシグナルを発行し、そのボタンのClientオブジェクトに(親クラスによって)関連付けることができるIDを返します。ボタンのタイトルで並べ替えたまま、このレイアウトにボタンを追加したり、このレイアウトからボタンを削除したりできるようにしたいと思います。適切にソートされたウィジェットをレイアウトに挿入するためのQtクラスまたはメソッドがないように思われるので、私は独自の解決策を考え出しました。私は可能であれば「標準」の方法で物事を行うことを大いに支持しているので、この問題に対するより良い解決策があるかどうか、または私が作成した解決策にエラーがあるかどうかを知らせてください。
私の解決策:
排他的チェック(一度にチェックできるボタンは1つだけ)はQButtonGroupによって提供されますが、並べ替えは提供されません。したがって、並べ替えを維持するために追加のデータ構造が必要です。(QString、int)のマップは、並べ替えを維持し、チェックされたボタンを親に渡される整数IDに関連付けることができるため、ここでは意味があるようです。クラス。また、QVBoxLayoutをマップと一緒にソートしたままにする必要があります。これにより、インデックスを挿入してレイアウトに中継した後、マップからインデックスを取得するロジックが必要になります。
親クラスは、SelectionLayoutクラスによって発行されたシグナルを適切に処理できるように、作成する各ボタンのIDをClientオブジェクトにマップできる必要があります。並べ替えは気にしないので、QHash(Client *、int)でこれを行うことができます。
これらはすべてかなり複雑に見え(すべてをソートして保持するための4つのデータ構造)、もっと簡単な方法があることを望んでいます。
よろしくお願いします。説明が不十分な場合はお知らせください。