信号与槽是Qt中的一个重要的机制,用于实现对象之间的通信。它的基本原理是一个对象发出一个信号(signal),另一个对象接收这个信号并执行相应的操作(slot)。信号和槽是通过QObject类来提供的,任何继承自QObject类的类都可以使用这个机制。
使用信号与槽的步骤如下:
定义信号:在类中定义一个信号函数,一般以void类型作为返回值,函数名以“signal_”开头,可以带上参数列表。
连接信号与槽:在需要连接的地方调用connect函数,将一个对象的信号和另一个对象的槽进行连接。
实现槽函数:在连接的槽函数中实现具体的操作逻辑。
下面是一个简单的例子,演示了如何使用信号与槽:
#include <QApplication>
#include <QPushButton>
class MyPushButton : public QPushButton
{
Q_OBJECT
public:
MyPushButton(QWidget *parent = nullptr) : QPushButton(parent)
{
setText("Click me!");
connect(this, SIGNAL(clicked()), this, SLOT(onClicked()));
}
private slots:
void onClicked()
{
setText("I'm clicked!");
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyPushButton btn;
btn.show();
return app.exec();
}
在这个例子中,我们自定义了一个按钮类MyPushButton,并重载了它的构造函数。在构造函数中,我们将按钮的clicked信号连接到自身的onClicked槽函数中。在onClicked函数中,我们将按钮的文本改为“I’m clicked!”。
这样,当用户点击按钮时,就会触发clicked信号,然后执行onClicked槽函数,从而改变按钮的文本。