QT信号和槽

信号和槽是QT的核心,在其他GUI中大多采用消息和回调函数,比如win32中
#include <QApplication>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QPushButton button("Quit");
    button.show();
    QObject::connect(&button, SIGNAL(clicked()), &app, SLOT(quit()));
    return app.exec();
}
在这里我们使用了QObject::connect,connect方法是QObject的静态方法,用于建立信号与槽的连接,头两个参数描述的是信号发送者和发送的什么信号,后面两个参数描述的是信号接受者和信号的处理函数也就是槽。槽就是普通的函数,我们可以在程序里面直接调用它,一个信号可以连接到多个槽,如果信号发射了,那么所有的槽都将会被调用。多个信号可以连接到一个槽,不管哪个信号发射了,这个槽都会被调用。在这里我们将button的clicked信号和quit()函数连接起来,当我们用鼠标点击button时,quit()函数将会被调用,表示应用程序退出。
另外一个例子
#include <QApplication>
#include <QHBoxLayout>
#include <QSpinBox>
#include <QSlider>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QWidget window;
    QHBoxLayout *layout = new QHBoxLayout(&window);
    QSpinBox *spinBox = new QSpinBox;
    QSlider *slider = new QSlider(Qt::Horizontal);
    
    layout->addWidget(spinBox);
    layout->addWidget(slider);

    QObject::connect(spinBox, SIGNAL(valueChanged(int)),
            slider, SLOT(setValue(int)));
    QObject::connect(slider, SIGNAL(valueChanged(int)),
            spinBox, SLOT(setValue(int)));
    window.setLayout(layout);    
    window.show();
    return app.exec();

}


当spinBox值发生变化时,发出valueChanged信号,slider接收到这个信号后,调用setValue函数,设置它的值。同理slider值变化时,也会发送valueChanged信号,spinBox值也将随着修改。
posted @ 2011-11-21 15:48  移动应用开发  阅读(266)  评论(0编辑  收藏  举报