2016-09-28 36 views
0
for(int i=0;i<2;i++) { for(int j=0;j<2,j++) { 
     snapshot_action[k]=new QAction(this); 
     snapshot_action[k]->setIconText("Snapshot"); 
     control_menu[k]->addAction(snapshot_action[k]); 
     connect(snapshot_action[k], &QAction::triggered, this, &SimplePlayer::snap_fun);}} 

隨着最初k=0; 我已經省略代碼其中規定了每個快照動作四個視圖。 (爲了簡單起見)。如何將值傳遞給qt中的SLOT函數?

現在的問題是,當我按任何視圖的快照動作按鈕,我應該知道該按下特定窗口的快照動作按鈕。

我該怎麼辦?

我該如何將價值傳遞給我的捕捉功能?

我是否需要在某個數組中存儲'k'的值? (有些壞主意)

+1

您可以使用['QObject :: sender()'](http://doc.qt.io/qt-5/qobject.html#sender)獲取信號的發送者 –

+0

試試['QSignalMapper' ](http://doc.qt.io/qt-5/qsignalmapper.html) – hank

回答

1

您可以使用QSignalMapper

QSignalMapper m_mapWidget; 

在代碼:

connect(&m_mapWidget, SIGNAL(mapped(int)), this, SLOT(snap_fun_k(int))); 

環K:

connect(action, SIGNAL(triggered()), &m_mapWidget, SLOT(map())); 
m_mapWidget.setMapping(action, k); 

請注意,您想要的信號映射器的生命週期至少與您希望執行映射的時間一樣長。