推 Arton0306:感謝:) 我再想想 01/06 22:40
※ 引述《Arton0306 (Ar藤)》之銘言:
: ※ 引述《uranusjr (←這人是超級笨蛋)》之銘言:
: : 不太懂你的問題
: : QSignalMapper 的用意是要取代一堆相似的 slots
: : 例如你有一堆選單, 每個按下去的功能都是顯示一個視窗, 只是按不同的會顯示不一樣
: : 那麼與其為每一個選單建立一個 slot, 然後重覆寫很多一樣的東西
: : 就不如用 QSignalMapper
: : 然後在 mapped() 所觸發的 slot 裡放個 switch-case 就搞定了
: 我要做的功能很類似你說的 也就是按不同的選單會顯示不一樣
: 不過觸發的slot本身是一個接收兩個整數值的function
: 這個slot是在這個選單還沒完成的時候就已經寫好的function
: 它本身就有自己的功能,不是為了當這個選單的slot而存在
: 後來程式增加新功能,照理說這個選單按下去只要把2個值傳給這個function就完成了,
^^^^^^^^^^^^^^^^^^
那我會建議趁這個機會趕快重構一下, 把該包的東西包一包
要嘛本來 slot 裡的參數就寫個 wrapper 物件封裝一下
要嘛修改你的 signal connecting, 不要這樣用 mapped() 裡面的參數
不然難保你之後又增加新功能要傳第三第四個不就倒了...
: 但現在問題在於選單按下去只能傳上述的4種參數,而沒辦法傳兩個值
: 所以我現在不知道怎麼做會比較漂亮
: : void QSignalMapper::mapped(int) 和 void QSignalMapper::mapped(QObject *)
: : 和其他同系列的函數所帶的那個參數, 就是用來識別發出該訊號的物件而已
: : 如果你只是想讓動態產生的 action 能被連結到一個 slot
: : 那直接 connect 就可以了, Qt 裡的 connect/disconnect 本來就是動態的
: : 根本不需要用到 QSignalMapper
--
╱ ̄ ̄ ̄╲
▏◢█◣ ▏
︻█︻█ ▏ 成龍表示: 是喔...
′/ ‵ ▏
╰╯ █╱
ψQSWEET ◥︶█◤
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.81.146