看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《Arton0306 (Ar藤)》之銘言: : QSignalMapper * mapper = new QSignalMapper( menu ); : for ( unsigned i = 1; i < data.size(); ++i ) : { : QAction * action = menu->addAction( tr( getName( data[i] ).c_str() ) ); : mapper->setMapping( action, data[i] ); : connect( action, SIGNAL(triggered()), mapper, SLOT(map()) ); : action->setEnabled( true ); : } : connect( mapper, SIGNAL(mapped( unsigned )), this, SLOT(myfunction( unsigned : )) ); : 在用Qt的signal和slot時遇到一個問題 : 為了在動態產生的選單中於按下時傳參數 所以用到了QSignalMapper : 如果我的slot叫做 : dumpMax : 它宣告式差不多會長這個樣子 : int dumpMax( int x, int y ); 不太懂你的問題 QSignalMapper 的用意是要取代一堆相似的 slots 例如你有一堆選單, 每個按下去的功能都是顯示一個視窗, 只是按不同的會顯示不一樣 那麼與其為每一個選單建立一個 slot, 然後重覆寫很多一樣的東西 就不如用 QSignalMapper 然後在 mapped() 所觸發的 slot 裡放個 switch-case 就搞定了 void QSignalMapper::mapped(int) 和 void QSignalMapper::mapped(QObject *) 和其他同系列的函數所帶的那個參數, 就是用來識別發出該訊號的物件而已 如果你只是想讓動態產生的 action 能被連結到一個 slot 那直接 connect 就可以了, Qt 裡的 connect/disconnect 本來就是動態的 根本不需要用到 QSignalMapper -- ╱ ̄ ̄ ̄╲ ▏◢█◣ 成龍表示: 是喔... ′/ ‵ ╰╯ ψQSWEET █◤ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.81.146