- Signal & Slot with Parameters
- 運用拉桿改變LCD數字
在實際運用上,Signal在發出時常常是帶參數的,而相對應的Slot也可以接受參數。
以下程式將建立一個LCD數字顯示元件,以及一個拉桿元件,LCD數字將顯示目前拉桿的進度。
#include <QApplication;> #include <QWidget> #include <QSlider> #include <QLCDNumber> int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget *parent = new QWidget; parent->setWindowTitle("Signal & Slot"); parent->setMinimumSize(240, 140); parent->setMaximumSize(240, 140); // equal to parent->setFixedSize(240, 140); QLCDNumber *lcd = new QLCDNumber(parent); lcd->setGeometry(70, 20, 100, 30); QSlider *slider = new QSlider(Qt::Horizontal, parent); slider->setRange(0, 99); slider->setValue(0); slider->setGeometry(70, 70, 100, 30); QObject::connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int))); parent->show(); return app.exec(); }
Notes:
QWidget *parent = new QWidget;
parent->setWindowTitle("Signal & Slot");
parent->setMinimumSize(240, 140);
parent->setMaximumSize(240, 140);
- QWidget是Qt中所有使用者圖形介面元件的父類別,可在螢幕上繪製自身,可接受滑鼠、鍵盤等介面操作,一個QWidget可以指定它的parent為哪個元件,而這也表示child可顯示的範圍將是在parent之內,parent沒有顯示的話,子元件也不會顯示。
- 沒有指定parent的QWidget是一個獨立視窗(window),例如先前的幾個範例,無論是QLabel或QPushButton都沒有指定parent,它們可獨立的顯示在畫面之中,只要呼叫其show()方法。
- QLCDNumber與QSlider實例建立時,指定了這個QWidget為它的parent,所以QLCDNumber與QSlider被置入了QWidget之中成為child。
- 當拉動QSlider的游標,造成游標值變動時會發出valueChanged(int) Signal,參數int表示Signal帶有一個整數值,在這表示QSlider的游標值一併被發出,QLCDNumber的display(int) Slot接受Signal所帶來的整數值,可以在QLCDNumber顯示數字。
QLCDNumber *lcd = new QLCDNumber(parent); QSlider *slider = new QSlider(Qt::Horizontal, parent);
QObject::connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));
本文參考自"良葛格:Qt4學習筆記"
0 意見:
張貼留言