gpt4 book ai didi

qt - 当一个小部件有很多子小部件时如何处理信号

转载 作者:行者123 更新时间:2023-12-02 21:34:10 24 4
gpt4 key购买 nike

我正在设计一款包含世界地图小部件的游戏;该小部件有 100 多个区域小部件作为其子部件。还有一个单独的信息面板小部件。当我单击某个区域时,我希望发送该信息并显示在信息面板上。到目前为止我的想法给了我两个选择:

  1. 将 100 多个区域中的每一个区域连接到信息面板。这对我来说似乎很难看,因为我觉得信息面板应该只了解世界地图小部件,而不是其内部工作原理(例如子项)。

  2. 将 100 多个区域中的每一个连接到 map 小部件,然后获得 map 发送另一个信号以供游戏中的其他小部件(例如信息面板)接收。就拥有独立的小部件而言,这似乎更好,但需要 2 个信号而不是 1 个。

这些方法中的一种比另一种更好吗?或者还有另一个我完全缺少的解决方案吗?

最佳答案

我曾经在一家生产自己的地理空间信息系统 (GIS) 产品的公司工作,我们也有使用 Qt 的确切用例。

根据我的经验,我们会使用选项#2,因为它封装了信息面板(即 View )和世界地图(即模型)之间的细节和关系。 )。

将来,也许您的世界地图将包含多个可选择的区域,并且信息面板可能不想开始了解您的世界地图中的所有不同实体世界地图来显示它们。所以,是的,虽然#2 会产生一些额外的信号,但从封装和扩展的角度来看,它可能会更好。

例如,将信息面板连接到来自世界地图的关于选定实体而不是区域的信号。当然,区域 一个实体并且直接使用区域可以工作,但将来也许你的世界地图会有可选择的建筑物标记车辆等...

connect( mapWidget, SIGNAL( selectedEntityChanged( MapEntity* ) ), 
infoPanel, SLOT( onSelectedEntityChanged( MapEntity* ) ) );

这样,您的信息面板就可以设计为一般性地显示有关实体的信息,而区域又是从该实体派生出来的。如果您想将车辆添加到您的 map 中并使其可以在信息面板中显示,您所要做的就是从车辆中派生出您的车辆>实体,你就可以开始了。

好问题欢迎来到 StackOverflow!

关于qt - 当一个小部件有很多子小部件时如何处理信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21771122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com