我想學習Qt,並希望從一個小項目開始。爲什麼我的連接不能觸發信號功能?
我在名爲「playPauseButton」的項目中添加了一個按鈕。目前,我正嘗試將它連接到一個應該處理所有按鈕事件的類中的信號,並使用SLOT中給出的枚舉值確定當前事件。
這是我的代碼現在:
connect(ui.playPauseButton, SIGNAL(clicked()), m_uiInit.get(), SLOT(ClickEvents(Buttons::PausePlayButton)));
注意m_uiInit
是指向其在它的ClickEvents()
方法的類shared_ptr
:
std::shared_ptr<UIInit> m_uiInit = std::shared_ptr<UIInit>(new UIInit());
我在UIInit類看起來插槽像這樣:
頭:
public slots:
void ClickEvents(Buttons button);
.cpp的:
void UIInit::ClickEvents(Buttons button)
{
switch (button)
{
case Buttons::PausePlayButton:
//Do something
break;
}
}
誰能向我解釋這是爲什麼不工作?
我懷疑這是由connect()調用中的第三個參數造成的。我經常用「this」看到它,但我讀了它並發現它似乎必須是一個指向包含SLOT方法的類的對象的指針?
任何人都可以幫我嗎?
「這應該處理所有的按鈕事件類」有沒有辦法來然後使用一個通用槽功能,但仍然能夠確定哪個按鈕稱爲功能?我將不得不提供某種信息,對吧? – Sossenbinder
@Sossenbinder - 檢查更新 – dtech
謝謝,這完美的作品。最後是一些C++ home土壤,帶有lambda表達式:)關於ui,它被自動生成爲我的例子中的一個對象。我實際上認爲這是標準行爲 – Sossenbinder