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();
#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();
}