Re: [問題] Qt QSignalMapper
※ 引述《uranusjr (←這人是超級笨蛋)》之銘言:
: ※ 引述《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 就搞定了
我要做的功能很類似你說的 也就是按不同的選單會顯示不一樣
不過觸發的slot本身是一個接收兩個整數值的function
這個slot是在這個選單還沒完成的時候就已經寫好的function
它本身就有自己的功能,不是為了當這個選單的slot而存在
後來程式增加新功能,照理說這個選單按下去只要把2個值傳給這個function就完成了,
但現在問題在於選單按下去只能傳上述的4種參數,而沒辦法傳兩個值
所以我現在不知道怎麼做會比較漂亮
: void QSignalMapper::mapped(int) 和 void QSignalMapper::mapped(QObject *)
: 和其他同系列的函數所帶的那個參數, 就是用來識別發出該訊號的物件而已
: 如果你只是想讓動態產生的 action 能被連結到一個 slot
: 那直接 connect 就可以了, Qt 裡的 connect/disconnect 本來就是動態的
: 根本不需要用到 QSignalMapper
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.140.149
推
01/06 22:22, , 1F
01/06 22:22, 1F
→
01/06 22:22, , 2F
01/06 22:22, 2F
→
01/06 22:37, , 3F
01/06 22:37, 3F
→
01/06 22:37, , 4F
01/06 22:37, 4F
→
01/07 00:21, , 5F
01/07 00:21, 5F
→
01/07 00:24, , 6F
01/07 00:24, 6F
→
01/07 00:25, , 7F
01/07 00:25, 7F
→
01/07 00:40, , 8F
01/07 00:40, 8F
→
01/07 00:42, , 9F
01/07 00:42, 9F
→
01/07 00:43, , 10F
01/07 00:43, 10F
→
01/07 00:44, , 11F
01/07 00:44, 11F
→
01/07 00:45, , 12F
01/07 00:45, 12F
→
01/07 00:46, , 13F
01/07 00:46, 13F
→
01/07 01:11, , 14F
01/07 01:11, 14F
→
01/07 01:12, , 15F
01/07 01:12, 15F
→
01/07 01:13, , 16F
01/07 01:13, 16F
→
01/07 01:42, , 17F
01/07 01:42, 17F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章