2010年9月13日 星期一

Qt4 學習筆記(三):Signal & Slot with Parameters

  • 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);

  1. QWidget是Qt中所有使用者圖形介面元件的父類別,可在螢幕上繪製自身,可接受滑鼠、鍵盤等介面操作,一個QWidget可以指定它的parent為哪個元件,而這也表示child可顯示的範圍將是在parent之內,parent沒有顯示的話,子元件也不會顯示。
  2. 沒有指定parent的QWidget是一個獨立視窗(window),例如先前的幾個範例,無論是QLabel或QPushButton都沒有指定parent,它們可獨立的顯示在畫面之中,只要呼叫其show()方法。
  3. QLCDNumber *lcd = new QLCDNumber(parent); QSlider *slider = new QSlider(Qt::Horizontal, parent);
  4. QLCDNumber與QSlider實例建立時,指定了這個QWidget為它的parent,所以QLCDNumber與QSlider被置入了QWidget之中成為child。
  5. QObject::connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));
  6. 當拉動QSlider的游標,造成游標值變動時會發出valueChanged(int) Signal,參數int表示Signal帶有一個整數值,在這表示QSlider的游標值一併被發出,QLCDNumber的display(int) Slot接受Signal所帶來的整數值,可以在QLCDNumber顯示數字。

本文參考自"良葛格:Qt4學習筆記"

0 意見: