2015-05-18 39 views
0

我從Qt Framework的示例基礎中收集了一個名爲日曆的應用程序的代碼。我試圖從中學習並添加一些功能。現在我得到的問題是,我想對我創建的兩個按鈕實現兩個功能(一個用於增加日期計數,第二個用於減少)。無法添加插槽並將其連接到按鈕

,我加入到功能增加天的代碼是:

void MainWindow::forward(int *click_forward) 
{ 
    click_forward++; 
} 

並添加到函數的代碼爲降低天:

void MainWindow::backwards(int *click_backwards) 
{ 
    click_backwards--; 
} 

在構造函數我定義了一個名爲click的變量,其類型爲int
,我通過引用將這個變量發送給兩個函數:

forward(&click); 
    backward(&click); 

在標題文件中,在公共slosts區域這些兩個功能都
定義爲:

void forward(int *click_forward); 

    void backwards(int *click_backwards); 

我還實現了兩個SIGNAL-SLOT連接:

QObject::connect(nextbtn, SIGNAL(clicked()), this, SLOT(forward(int 
    &click))); 

    QObject::connect(beforebtn, SIGNAL(clicked()), this, 
    SLOT(backwards(int &clickt))); 

但由於某些原因,當我編譯該項目時,我收到的信息是:

QObject::connect: No such slot MainWindow::forward(int &click) 

    QObject::connect: No such slot MainWindow::backwards(int &clickt) 

我想在這兩個函數中使用指針,只是爲了處理原始變量本身而不是在副本上。 我可不可以請你指出我做錯了什麼。

謝謝

+2

你好,信號和插槽需要有相同的簽名。此外,我相信你的意思是(* click_forward)++; 如果您想以這種方式使用插槽,請創建一個維護點擊計數器的中間對象。 – Searles

回答

4

的問題是,你的信號和槽(S)有不同的特徵:信號沒有參數,但槽具有指針類型的參數。此外,即使您的信號連接會的工作,這樣的代碼的執行不會做任何有用的東西(至少)爲您修改臨時定義的變量click_backwards

我會以下列方式解決這個問題:

定義類的成員變量和插槽:

class MainWindow 
{ 
    [..] 
private slots: 
    void forward(); 
    void backwards(); 

private: 
    int click_forward; 
    int click_backwards; 
} 

定義插槽:

void MainWindow::forward() 
{ 
    click_forward++; 
} 

void MainWindow::backwards() 
{ 
    click_backwards--; 
} 

最後建立ç onnections:

QObject::connect(nextbtn, SIGNAL(clicked()), this, SLOT(forward())); 
QObject::connect(beforebtn, SIGNAL(clicked()), this, SLOT(backwards())); 
+0

非常感謝您的回答,但也有另一個問題,由於當我嘗試使用您的解決方案並編譯該程序時,我收到:沒有匹配函數調用MainWindow :: forward(int *),因爲我調用了函數這種方式在構造函數中 - 向前(&click);所以在函數本身中應該可能會收到這個變量'click'。你能幫我解決這個問題嗎? – Bartosz

+0

'forward()'和'backwards()'函數都沒有任何參數。你只需要無需參數就可以打電話給他們。 – vahancho

+0

但是,當他們通過構造函數中的引用接收到傳遞給這些函數的變量的地址時,他們兩個都不應該有任何參數:int click;前(點擊)向後(&點擊)? – Bartosz

1

如果你做你喜歡這一點,那麼你會得到一個編譯錯誤,而不是運行時錯誤,我個人覺得非常有幫助的,因爲它只是告訴你,他們不會因爲連接信號和槽不兼容的信號/插槽

QObject::connect(nextbtn, &QPushButton::clicked, this, &MainWindow::forward); 
1

順便說一句,你不增加整數值,你增加指針。

這是一個等待發生的錯誤。

+0

只是爲了澄清,這樣做:'(* click_forward)++'而不是:'click_forward ++'。與'click_backwards - '相同。 – Carlton

+1

希望他已經分配了整數,並不只是隨機存儲器周圍.... – OddBeck