我試圖從QSlider上觸發一個不同的信號,當它增加或減少時。不幸的是,由於我在我的控制之外創建的程序中的限制,我無法跟蹤滑塊的值,只是做一個比較。有沒有辦法在QSlider上產生一個信號值增加
有沒有辦法做到這一點?
我試圖從QSlider上觸發一個不同的信號,當它增加或減少時。不幸的是,由於我在我的控制之外創建的程序中的限制,我無法跟蹤滑塊的值,只是做一個比較。有沒有辦法在QSlider上產生一個信號值增加
有沒有辦法做到這一點?
如果我理解正確,則不能使用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)), ...);
QSlider
發出信號valueChanged
,只需將其連接到一個插槽:
mySlider.valueChanged.connect(self.on_mySlider_valueChanged)
和你的測試那裏,如果你喜歡發出定製信號。
我不完全理解這個問題,也許一個例子會有所幫助。但是,如果您查看QSlider的文檔,則當滑塊的值發生變化時,它會發出信號valueChanged(int)
。