2013-01-02 40 views
0

可能重複:
Using QSlider to change the value of a variable如何使用QSlider在可變

我試圖使用QSlider來改變一個變量值: 這裏的一部分代碼:

.... 
QSlider *slider = new QSlider(Qt::Horizontal,0); 
connect(slider,SIGNAL(valueChanged()),this,SLOT(value(int k))); 
... 

函數值是一個SLOT,我想用它說像第是:

void value (int k) { 
cout<< k << endl; 
} 

我的問題是,當我移動滑塊沒有任何反應。 ?

在此先感謝

+0

我建議你閱讀關於Qt AGAIN中的信號和插槽系統,很明顯你不明白它 –

+0

不,它不是一個複製品,如果我把它放在進度條中,我可以使用這個傻瓜值,但是我想要獲取滑塊的位置 – Engine

+0

這是完全相同的問題,但在代碼中的不同位置。並且這兩個問題都有完全一樣的來源:當你在閱讀Qt –

回答

9

您必須將參數int置於信號簽名上,以使其將值傳遞給插槽。另外,請勿在SIGNAL(...)/SLOT(...)簽名規範中放置參數名稱。

... 
QSlider *slider = new QSlider(Qt::Horizontal, this); 
connect(slider, SIGNAL(valueChanged(int)), this, SLOT(value(int))); 
... 

同時,確保value是你的類,而不是一個獨立的功能的插槽。我想你已經把上面的代碼放在類函數中,而不是主要的或者其他任何獨立函數中,因爲在這些函數中沒有定義this。所以,你所談論的槽必須是一個成員函數,尤其是你正在寫這個代碼的類的一個QObject插槽。更改

void value (int k) { 
    cout << k << endl; 
} 

void MyClass::value (int k) { 
    cout << k << endl; 
} 

,並在你的類定義MyClass添加public slots:部分:

class MyClass : public ... { 
    Q_OBJECT 
    ... 
public slots: 
    void value(int); 
    ... 
} 

此外,給你插槽一個有意義的名字,例如sliderChanged,否則,混亂將統治你的項目遲早肯定。

+0

thans leemes時,你沒有注意到它的工作原理 – Engine

+0

@Engine啊,並將'parent'傳遞給'QSlider'的構造函數。否則,你的應用程序會泄漏內存。看我的編輯。 – leemes

+2

@Engine哦,別在意......如果你之後把滑塊放在一個小部件中,可以在構造函數中傳遞'0'。我猜你在做什麼,否則你會在一個小窗口看到一個滑塊。 – leemes