Qt编程中的信号和槽机制
在使用自定义类创建一个按钮之后,只能看到一个按钮的图形,但是使用鼠标点击并无任何反应,下面想要实现一个“点击按钮可以关闭窗口”的功能。
关闭窗口的功能可以被抽象为以下对象和操作,即:按钮,点击按钮,窗口,关闭窗口。在qt
中使用connect
实现这个过程。
connet(信号的发送者,发送的具体信号,信号的接受者,信号的处理(槽))
信号槽的一个优点:松散耦合,即信号的发送端和接收端本身是没有关联的,通过connect
连接,将两端耦合在一起。
// myself button
MyPushButton *myBtn = new MyPushButton;
myBtn->setText("mybtn");
myBtn->setParent(this);
myBtn->move(10, 0);
myBtn->resize(200, 100);
// close the window
connect(myBtn, &QPushButton::clicked, this, &myWidget::close);
// 通过帮助文档查找按钮对应的信号 signals & slots
以上即 信号和槽 的简单功能演示。其中用到的信号和槽是父类中已经定义好的用来实现特定的功能,下面来实现自定义的信号和槽功能。过程为:跑完步,张三口渴拿起杯子喝水。新建一个类,在自动生成的类声明位置,可以看到其中包含放置自定义信号的位置,信号只需要声明,不需要实现,可以包含参数但不需要返回值。如下,信号就定义好了。
class Person : public QObject
{
Q_OBJECT
public:
explicit Person(QObject *parent = nullpt