一、什么是信号槽机制
信号槽机制是Qt的核心特性,是对C/C++的拓展,应用于对象与对象之间的通信。信号槽的处理依赖于moc(Meta Object Compiler)工具。
信号槽机制很好地完成了界面操作的响应,类似于MFC和matlab GUI中的callback函数。信号与槽会通过connect函数进行连接,信号会在某种情况或者动作下由某个对象发射,连接了该信号的槽会接收到该信号,然后执行相应的操作。
二、信号槽机制的连接方式
比较常用的连接方式是,对象A发射信号,对象B的槽函数接收信号做出响应。函数原型:QMetaObject::Connection connect (const QObject *, const char*, const QObject*, const char*, Qt::ConnectionType)。一般只使用前面的四个参数,即connect(sender, signal, receiver, slot)。sender发送signal,然后receiver的slot接收信号。
以下举个小例子,点击按钮关闭窗口。
创建Qt Widgets Application,基于QMainWindow类,不包含ui文件。修改MainWindow构造函数如下:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QPushButton *btn1 = new QPushButton(tr("Close"));//创建一个按钮控件
QHBoxLayout *mainLayout = new QHBoxLayout;
mainLayout->addWidget(btn1, 1, Qt::AlignCenter);//将按钮添加到布局管理器中
QWidget *mainWidget = new QWidget(this);
mainWidget->setLayout(mainLayout);
this->setCentralWidget(mainWidget);//将新建的mainWidget作为MainWindow的主widget
connect(btn1, SIGNAL(clicked(bool)), this, SLOT(close()));//按钮btn1被点击时发射信号,窗口MainWindow接收到信号时调用close()函数,关闭窗口。
}
程序运行结果如下:
&nbs