爲了將信號連接到插槽,據我所知,信號的參數需要與插槽的參數相匹配。因此,例如:將信號連接到固定值的插槽
connect(dockWidget->titleBarWidget(), SIGNAL(closeButtonClicked()), ui->sideControls, SLOT(closeDockWidget()));
但是,如果我想有一個信號呼叫具有不同量的參數的插槽,但總是傳遞一個恆定值插入插槽什麼。例如,使用上面的代碼段:
connect(dockWidget->titleBarWidget(), SIGNAL(closeButtonClicked()), ui->sideControls, SLOT(setDockWidget(false)));
或者換言之,每當按下該按鈕時,它調用setDockWidget()
函數與假參數。這可能嗎?
這個答案不再有效,因爲C++ 11上的Qt5語法使得爲此目的使用lambda非常容易。 – 2016-06-08 10:36:38
@安德烈,另一方面,你可以'創建代理插槽,這將調用所需的一個.'現在到位 – Lol4t0 2016-06-08 15:04:03
當然,你可以。但額外的插槽意味着您不想要的頭部中有更多東西,暴露於外部調用(是的,即使專用插槽可以從外部調用)並將代碼分散到多個位置。你甚至可能需要額外的成員變量來包含你想傳遞的值,從而在你的類中引入額外的狀態。 lambda解決方案非常優雅,因此它將代理插槽的引入視爲IMO的解決方案。 – 2016-06-08 18:51:37