1

问题:

我正在 C++ 中创建一个类,其中包含一个 QVBoxLayout 按钮,这些按钮被专门检查(单击)。每个按钮代表一个 Client 对象,其中包含的数据不仅仅是按钮的标题。当检查任何按钮时,新类“ SelectionLayout”将发出信号,并将返回可以(由父类)关联的ID到该按钮的客户端对象。我希望能够在此布局中添加和删除按钮,同时保持按按钮标题排序。似乎没有用于将正确排序的小部件插入布局的 Qt 类或方法,因此我提出了自己的解决方案。如果可能的话,我非常支持以“标准”方式做事,所以请告诉我是否有更好的解决方案来解决这个问题,或者我创建的解决方案是否存在错误。

我的解决方案:

QButtonGroup 提供排他检查(一次只能检查一个按钮),但排序不是。所以我需要一个额外的数据结构来保持它的排序,(QString, int) 的 Map 在这里似乎很有意义,因为它将保持排序并且我可以将选中的按钮与将传递给父级的整数 id 相关联班级。我还需要 QVBoxLayout 与地图一起保持排序,这将采取一些逻辑,在将索引插入并中继到布局后从地图中抓取索引。

父类必须能够将它创建的每个按钮的 id 映射到 Client 对象,这样我们才能正确处理 SelectionLayout 类发出的信号。我可以使用 QHash (Client*, int) 来做到这一点,因为我们不关心排序。

所有这一切似乎都相当复杂(四个数据结构来保存和保持一切排序),我希望有一种更简单的方法。

提前感谢您的帮助,如果我的解释不充分,请告诉我。

4

0 回答 0