问题:
我正在用C ++创建一个包含QVBoxLayout按钮的类,这些按钮是专门检查的(单击)。每个按钮代表一个Client对象,其中包含的数据多于按钮的标题。当选中任何按钮时,新类“SelectionLayout”将发出一个信号,并返回一个可以(通过父类)与该按钮的Client对象关联的id。我希望能够在保持按按钮标题排序的同时添加和删除此布局中的按钮。似乎没有用于将正确排序的窗口小部件插入布局的Qt类或方法,因此我提出了自己的解决方案。如果可能的话,我是以“标准”方式做事的大力支持者,所以如果有更好的解决方案,或者我创建的解决方案中存在错误,请告诉我。我已经google了很长一段时间,我要么缺少一些非常基本的东西,要么这是一个足够独特的问题,每个人都在创建自己的解决方案。
我的解决方案:
QButtonGroup提供独家检查(一次只能检查一个按钮),但排序却不是。所以我需要一个额外的数据结构来保持它的排序,这里的(QString,int)Map似乎有意义,因为它将保持排序并且我可以将选中的按钮与将传递给父项的整数id相关联类。我还需要QVBoxLayout与地图一起保持排序,这将采取一些逻辑,在插入并将其转发到布局后将索引从地图中抓取。
父类必须能够将它创建的每个按钮的id映射到Client对象,以便我们可以正确处理SelectionLayout类发出的信号。我可以使用QHash(Client *,int)执行此操作,因为我们不关心排序。
所有这些看起来都很复杂(四个数据结构可以保持并保持一切排序),我希望有一种更简单的方法。
在此先感谢您的帮助,如果我的解释不充分,请告诉我。