我有一个自定义 QDialog,上面有一组自定义滑块(即 QWidget,每个都由一个滑块和一个关联的标签组成)。本质上,此对话框用于通过调整每个维度的滑块来更改 3D 场景中对象的坐标。
目前,QDialog 本身存储一个指向它修改的场景对象的指针。因此,当滑块发射时负责对象移动的插槽valueChanged
也是 QDialog 类的一部分。因为它无法知道哪个滑块被移动了,所以移动函数(相当低效)只是循环遍历对话框中的所有滑块,收集它们的值,然后为 3D 对象分配一个新配置。
理想情况下,只有在移动滑块时才需要重新分配已更改的维度。所以我尝试使用 QSignalMapper 来识别每个带有数字索引的滑块。这将需要能够发送valueChanged
带有两个参数的信号:一个标识发送方滑块,另一个提供新值本身。不幸的是,正如我在这里学到的,QSignalMapper 不能这样做。
获得我想要的功能的另一种方法可能是使用该sender()
方法。但是,根据文档,这是不好的做法——它违反了模块化原则。
我可以想到其他几个解决方案:允许自定义滑块类存储其父对话框(在同样的说法中似乎sender()
很糟糕),或者甚至可以将可移动对象本身存储为自定义滑块类的静态成员在整个对话框中(非静态/现在这样)。
如果有的话,这些方法中的哪一种是最好的方法?我应该考虑哪些替代方案?