2011-12-03 39 views
1

我是Qt的初學者,並且正在製作(或者至少試圖製作)一個基本的計算器。如果我理解正確的話,這樣做的時候:Qt SLOTS參數(初學者)

connect(my_button_4, SIGNAL(clicked()), this, SLOT(writeNumberLbl("4"))); 

「4」是無法訪問的(更確切地說,只有它的類型)的writeNumberLbl。基本上,我希望當按鈕被點擊時,標籤將其文本設置爲「4」。不過,我有數字0到9,所以我想做的事:

connect(my_button_0, SIGNAL(clicked()), this, SLOT(writeNumberLbl("0"))); 
connect(my_button_1, SIGNAL(clicked()), this, SLOT(writeNumberLbl("1"))); 
... 
connect(my_button_9, SIGNAL(clicked()), this, SLOT(writeNumberLbl("9"))); 

我writeNumberLbl功能是:

void Calculator::preWriteVal(QChar val) 
{ 
    QString curVal = ui.lbl_output->text(); 
    curVal += val; 
    ui.lbl_output->setText(curVal); 
} 

不過,我可以看到,這不會因參數工作, 'VAL'。有人能指點我正確的方向嗎?謝謝。我確實希望看看這個問題是否已經得到解答並且找不到任何東西。如果有,請給我一個鏈接。

另外,是否有可能使用Qt Designer 4將小部件連接到自定義插槽?

謝謝。

+0

看看我的答案類似的問題,在這裏:http://stackoverflow.com/questions/5153157/passing-an-argument-to-a-slot/5153522#5153522 – TonyK

+0

你可以關注我的博客Qt應用程序開發的新手:https://qtnoobies.blogspot.my/ – GeneCode

回答

0

有很多方法可以解決這個問題,他們的概述very nicely here。儘管該頁面有點舊,但我認爲它仍然非常有效。我會推薦使用信號映射器。

對於你的第二個問題,是的。通過在「編輯信號/插槽」模式下設置設計器,您可以使用Qt Designer連接信號和插槽。例如,一旦進入此模式,您可以將連接線從按鈕拖到窗體中。將打開一個對話框,讓您選擇要連接的信號和插槽。如果您尚未在代碼中實施插槽,則可以指定插槽的名稱,然後爲其添加代碼。

+0

感謝您的建議;然而,我知道「編輯信號/插槽」模式,我想我想知道的是,是否有某種方式拖拽自定義插槽(我製作的插槽)的按鈕。 –

+0

是的。如果您已經定義了一個插槽,則可以將連接器拖動到具有該插槽的對象,然後在出現的對話框中將其連接起來。 –

+0

感謝您的幫助。我認爲我現在明白了很多。 在文檔中說到最後:「...如果您要實現一個調色板工具,允許用戶從一組標準顏色中選擇一種顏色並需要發出一個colorSelected(const QColor&)信號,你最好的選擇是使用sender()方法或上述的子類方法。「 (button1 ==(* pusbutton)sender()) //將調色板顏色更改爲藍色 否則if(button2 ==( * pusbutton)發件人()) //更改調色板顏色紅色 等 –

1

據我所知,Qt的信號/槽系統要求的信號函數的參數的數量不小於該狹槽的功能。 在您的示例中,信號函數click()具有零參數,並且插槽函數writeNumberLbl(「4」)具有一個參數,Qt的信號/插槽系統不會接受此參數,並且如果您在Qt的調試模式下運行程序創建者,qDebug會向您顯示一條消息,如'不兼容信號/插槽'blalbalba〜。要解決這個問題,請閱讀由Arnold Spence提供的文章。這很清楚。

0

插槽中的參數數量無法退出信號中的參數數量?並按()沒有。你有兩種選擇(三種,啞數):

  1. 使用QSignalMapper。它的幫助是不言自明的。
  2. 將所有按鈕連接到單個插槽。在它中,找出按下了哪個按鈕。 QObject :: sender()函數有所幫助。

還有更多的方法,但更復雜。