※ 引述《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