QT——信号槽
结合教程,写出如下关于信号槽的代码,将教程中信号槽两种方式写入同一个界面中。
- #include "mainwindow.h"
- #include <QApplication>
- #include <QPushButton>
- #include <QDebug>
- #include <QHBoxLayout>
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- //MainWindow w;
- //w.show();
- QWidget *myWidget = new QWidget;
- myWidget->setWindowTitle("Hello World");
- //信号槽
- QPushButton *button0 = new QPushButton;
- button0->setText("Quit");
- QObject::connect(button0, &QPushButton::clicked, &QApplication::quit);
- // Lambda表达式标准输出
- QPushButton *button = new QPushButton;
- button->setText("std::out");
- QObject::connect(button, &QPushButton::clicked, [](bool) {
- qDebug() << "You clicked me!";
- });
- QHBoxLayout *layout = new QHBoxLayout;
- //layout->addItem(button0);
- layout->addWidget(button0);
- layout->addWidget(button);
- myWidget->setLayout(layout);
- myWidget->show();
- return a.exec();
- }
Qt5中信号槽的定义:
- 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);
- 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 发出了 signal 信号之后,会自动调用 receiver 的 slot 函数。
- connect(sender, signal, receiver, slot);
自定义信号槽:
- //newspaper.h
- #ifndef NEWSPAPER_H
- #define NEWSPAPER_H
- #include <QObject>
- //使用信号槽必须继承QBject类
- class Newspaper : public QObject
- {
- //QBject类及其子类,都必须在第一行写Q_OBJECT
- //该宏应放于头文件中
- Q_OBJECT
- public:
- Newspaper(const QString & name) :
- m_name(name)
- {
- }
- void send()
- {
- //emit 的含义是发出newPaper()的信号
- emit newPaper(m_name);
- }
- //信号函数,返回值为void,参数是类要让外界获取的数据
- signals:
- void newPaper(const QString &name);
- private:
- QString m_name;
- };
- #endif // NEWSPAPER_H
- //reader.h
- #ifndef READER_H
- #define READER_H
- #include <QObject>
- #include <QDebug>
- class Reader : public QObject
- {
- Q_OBJECT
- public:
- Reader() {}
- //槽函数
- void receiveNewspaper(const QString & name)
- {
- qDebug() << "Receives Newspaper: " << name;
- }
- };
- #endif // READER_H
- #include "mainwindow.h"
- #include "newspaper.h"
- #include "reader.h"
- #include <QApplication>
- #include <QPushButton>
- #include <QDebug>
- #include <QHBoxLayout>
- int main(int argc, char *argv[])
- {
- QCoreApplication app(argc, argv);
- //MainWindow w;
- //w.show();
- Newspaper newspaper("Newspaper A");
- Reader reader;
- //信号连接机制
- QObject::connect(&newspaper, &Newspaper::newPaper,
- &reader, &Reader::receiveNewspaper);
- newspaper.send();
- return app.exec();
- }
编译文件,报错——LNK2001,无法链接解析的外部符号。
解决方法:将Project的同级编辑文件删除,重新编译既可。
输出:
QT——信号槽的更多相关文章
- Qt信号槽的一些事(第一次知道信号还有返回值,以及Qt::UniqueConnection)
注:此文是站在Qt5的角度说的,对于Qt4部分是不适用的. 1.先说Qt信号槽的几种连接方式和执行方式. 1)Qt信号槽给出了五种连接方式: Qt::AutoConnection 0 自动连接:默认的 ...
- QT 信号槽connect中解决自定义数据类型或数组作为函数参数的问题——QT qRegisterMetaType 注册MetaType——关键:注册自定义数据类型或QMap等容器类
一般情况下信号槽直接连接方式不会出现问题,但是如果信号与槽在不同线程或Qt::QueuedConnection方式连接,可能会在连接期间报以下类似问题,如: QObject::connect: Can ...
- QT信号槽详解
1 QT信号槽详解 1.1 信号和槽的定义 信号是触发信号,例如按钮的点击触发一个clicked信号,槽是用来接收信号,并处理信号,相当于信号响应函数.一个信号可以关联多个槽函数,信 ...
- Qt信号槽的一些事 Qt::带返回值的信号发射方式
一般来说,我们发出信号使用emit这个关键字来操作,但是会发现,emit并不算一个调用,所以它没有返回值.那么如果我们发出这个信号想获取一个返回值怎么办呢? 两个办法:1.通过出参形式返回,引用或者指 ...
- Qt信号槽的一些事
注:此文是站在Qt5的角度说的,对于Qt4部分是不适用的. 1.先说Qt信号槽的几种连接方式和执行方式. 1)Qt信号槽给出了五种连接方式: Qt::AutoConnection 0 自动连接:默认的 ...
- QT源码之Qt信号槽机制与事件机制的联系
QT源码之Qt信号槽机制与事件机制的联系是本文要介绍的内容,通过解决一个问题,从中分析出的理论,先来看内容. 本文就是来解决一个问题,就是当signal和slot的连接为Qt::QueuedConne ...
- Qt信号槽-原理分析
目录 一.问题 二.Moc 1.变量 2.Q_OBJECT展开后的函数声明 3.自定义信号 三.connect 四.信号触发 1.直连 2.队列连接 五.总结 六.推荐阅读 一.问题 学习Qt有一段时 ...
- Qt信号槽源码剖析(一)
大家好,我是IT文艺男,来自一线大厂的一线程序员 大家在使用Qt开发程序时,都知道怎么使用Qt的信号槽,但是Qt信号槽是怎么工作的? 大部分人仍然不知道:也就是说大家只知道怎么使用,却不知道基于什么原 ...
- Qt信号槽源码剖析(二)
大家好,我是IT文艺男,来自一线大厂的一线程序员 上节视频给大家讲解了Qt信号槽的基本概念.元对象编译器.示例代码以及Qt宏:今天接着深入分析,进入Qt信号槽源码剖析系列的第二节视频. Qt信号槽的宏 ...
- (文字版)Qt信号槽源码剖析(三)
大家好,我是IT文艺男,来自一线大厂的一线程序员 上节视频给大家讲解了Qt信号槽的Qt宏展开推导:今天接着深入分析,进入Qt信号槽源码剖析系列的第三节视频. Qt信号槽宏推导归纳 #define si ...
随机推荐
- 【总结】牛客职播第九期:您的美团点评offer已送到门口,快来与我们一起影响世界!
一.介绍 美团点评2018校园春招流程介绍&面试答疑 讲师:燕鹏.Taylor 二.收获 面试时如果太紧张或者内向,容易吃亏,所以建议把面试当做展示自己的一次舞台. 遇见一道编程题目,如果无法 ...
- 第三百六十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索功能
第三百六十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索功能 Django实现搜索功能 1.在Django配置搜索结果页的路由映 ...
- vi 命令集
一:跳到文件第一行 1. 输入:0或:1,然后回车: 2. 在键盘按下小写gg: 二:跳到文件最后一行 1. 输入:$,然后回车: 2. 在键盘按下大写G : 3. 在键盘按Shift + g: ...
- JavaScript数据去掉空值
js数组中过滤掉false, null, 0, "", undefined, and NaN值的方法 对于 false,null,0,undefiend,NaN直接取!得到的都是t ...
- 成都传智播客java就业班(14.04.01班)就业快报(Java程序猿薪资一目了然)
这是成都传智播客Java就业班的就业情况,很多其它详情请见成都传智播客官网:http://cd.itcast.cn?140812ls 姓名 入职公司 入职薪资(¥) 方同学 安**软件成都有限公司(J ...
- springboot+shiro+redis(单机redis版)整合教程
相关教程: 1. springboot+shiro整合教程 2. springboot+shiro+redis(集群redis版)整合教程 3.springboot+shiro+redis(单机red ...
- Windows 7运行命令大全
Windows 7运行命令大全,小编整理了常用的45个Win7运行命令分享给大家:1.cleanmgr:打开磁盘清理工具 2.compmgmt.msc:计算机管理 3.conf:启动系统配置实用程序 ...
- [转]Apache 监听端口失败,selinux惹的祸
原文在此 CentOS 下启动Httpd 失败,报 (13)Permission denied: make_sock: could not bind to address [::]:8000 因为 小 ...
- Thinkphp5笔记一:项目部署
系统:window 7 64位 Thinkphp版本:5.0.5 环境:wampserver集成 笔记分为两大部分,配置篇与数据库篇 一.虚拟主机部署/本地部署 在网站根目录下建立文件index.ph ...
- EasyUI的功能树之扁平化
上篇博客主要介绍了异步加载树的方法,通过前台传给后台一个节点的id值,然后当单击节点加号时,查询并显示其子节点的数据.其实如果不是很大的数据,我们本可以次把树中所有节点都加载上来的.也就是说,我的Ac ...