2012-12-07 10 views

回答

4

如果我理解正確,則不能使用valueChanged(int)來決定值是增加還是減少,因爲您無法跟蹤該值。但是,您需要這樣做,因爲QSlider對增加/減少的值沒有明確的信號。

使用此助手類來跟蹤當前值。它將所提供的目標對象的信號valueChanged(int)重新映射爲告知(絕對)差異的新信號valueIncreased(int)valueDecreased(int)

class ValueChangeTracker : public QObject 
{ 
    Q_OBJECT 
    int v; 
public: 
    ValueChangeTracker(QObject *target) : 
     QObject(target) 
    { 
     connect(target, SIGNAL(valueChanged(int)), SLOT(changed(int))); 
     v = target->property("value"); // or ->value() if you specifically use QSlider* instead of QObject* as the target type 
    } 
signals: 
    void valueIncreased(int); 
    void valueDecreased(int); 
private slots: 
    void changed(int newValue) { 
     int diff = newValue - v; 
     v = newValue; 
     if(diff > 0) emit valueIncreased(diff); 
     if(diff < 0) emit valueDecreased(-diff); 
    } 
}; 

要使用它,只需創建這個類的一個新實例,並連接到它的信號。在QObject樹中,它成爲目標對象的子對象,因此不必將指針保留爲實例。

QSlider *mySlider = ... 
ValueChangeTracker *tracker = new ValueChangeTracker(mySlider); 
connect(tracker, SIGNAL(valueIncreased(int)), ...); 
connect(tracker, SIGNAL(valueDecreased(int)), ...); 
0

QSlider發出信號valueChanged,只需將其連接到一個插槽:

mySlider.valueChanged.connect(self.on_mySlider_valueChanged) 

和你的測試那裏,如果你喜歡發出定製信號。

0

我不完全理解這個問題,也許一個例子會有所幫助。但是,如果您查看QSlider的文檔,則當滑塊的值發生變化時,它會發出信號valueChanged(int)

相關問題