我有一個自定義QDialog,其中包含一組自定義滑塊(即每個由滑塊和相關標籤組成的QWidgets)。實質上,該對話框用於通過調整每個維度的滑塊來更改3D場景中對象的座標。在具有多個滑塊的自定義QWidget中映射QSlider :: valueChanged信號
目前,QDialog本身存儲一個指向它修改的場景對象的指針。因此,當滑塊發射時,處理物體移動的插槽也是QDialog類的一部分。由於無法知道哪個滑塊被移動,因此移動功能(相當低效)只是循環瀏覽對話框中的所有滑塊,收集其值併爲3D對象分配新配置。
理想情況下,只有移動滑塊時必須重新分配更改的維度。所以我嘗試使用QSignalMapper來標識每個滑塊的數字索引。這需要能夠發送帶有兩個參數的valueChanged
信號:一個標識發送器滑塊,另一個給出新值本身。不幸的是,當我學到here時,QSignalMapper無法做到這一點。
獲得我想要的功能的另一種方法可能是使用sender()
方法。但是,根據文檔,這是不好的做法 - 它違反了模塊化原則。
我可以想到一些其他解決方案:允許自定義滑塊類存儲其父對話框(看起來很糟糕,也就是說sender()
是壞的),或者甚至可以將可移動對象本身存儲爲靜態成員自定義滑塊類代替整個對話框中的(非靜態/現在)。
這些方法中的哪一個(如果有的話)將是最好的方法嗎?我應該考慮哪些替代方案?
該方法效果很好!事實上,我發現在我的情況下額外的'valueChanged'發射是不必要的;我可以在我的'checkSlider'版本中進行必要的調整。 – nicole