c语言sscanf函数的用法是什么
274
2022-09-23
Qt 信号槽(笔记)
了解信号槽
看一个例子:
先看代码
#include
代码和上一篇的HelloWorld类型,只不过把文本框换成了按钮(button)
但是有一行是特别的
QObject::connect(&button, &QPushButton::clicked, &QApplication::quit);
connect的常用形式是:
connect(sender, signal,
receiver, slot);
四个参数分别是发出信号的对象, 信号, 接收者, 接受者在接到信号后做出的反应(即调用的函数)。
即sender 发生信号 signal后, 就调用receiver的slot函数。
QObject::connect有5种重载
QMetaObject::Connection connect(const QObject *, const char *, const QObject *, const char *, Qt::ConnectionType);QMetaObject::Connection connect(const QObject *, const QMetaMethod &, const QObject *, const QMetaMethod &, Qt::ConnectionType);//将this指针作为receiver,隐式传入QMetaObject::Connection connect(const QObject *, const char *, const char *, Qt::ConnectionType) const;QMetaObject::Connection connect(const QObject *, PointerToMemberFunction, const QObject *, PointerToMemberFunction, Qt::ConnectionType)QMetaObject::Connection connect(const QObject *, PointerToMemberFunction, Functor);
对应位置的参数分别和基本形式对应
从中可以看出
connect()函数的sender和reveicer都是QObject指针,
signal和slot一致,可以是char*,QMethod, PointerToMemberFunction
第5个比较特别 最后一个参数是Functor。 这个类型可以接受 static 函数、全局函数以及 Lambda 表达式。
信号槽要求信号和槽的参数类型一致。允许槽函数的参数可以比信号的少(这样槽会忽略信号传来的多余的参数)
自定义信号槽:
这个例子定义了一个发送者Newspaper(报纸),一个接收者Reader(读者)
发送者:报纸 有1个信号,
接受者 :读者 有1个成员函数 在connect时用作槽。
// newspaper.h//Newspaper类 继承了QObject,继承了它的信号槽class Newspaper : public QObject{ //QObject类(及其子类)都要在第1行写Q_OBJECT Q_OBJECTpublic: Newspaper(const QString & name) : m_name(name) { } void send() { emit newPaper(m_name); //emit:发出newPaper()信号, 感兴趣的接受者会关注这个信号 }//signals:该类的信号signals: //函数名就是信号,返回值是void,参数是让外界知道的数据。不需要在.cpp中实现 void newPaper(const QString &name);private: QString m_name;};
reader.h
接收者receiver:Reader
/ reader.h#include
main.cpp
在主函数先创建1个newspaper(发送者) 和 1个reader(接收者)
使用函数connect()让我们连接发送者和接收者,及发送者的信号,接收者的槽。
当调用newspaper的send时,send执行函数emit newsPaper 即发送信号newsPaper
接收者reader自动接收信号,调用相应的槽
Reader::receiveNewspaper
执行对应的语句
qDebug() << "Receives Newspaper: " << name;
在控制台输出:
Receives Newspaper: "Newspaper A"
#include
注:如果运行出现LINK错误,解决办法:确定代码正确后重新qmake(右键项目,选择qmake)
总结:
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~