博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QT——信号槽
阅读量:7099 次
发布时间:2019-06-28

本文共 3396 字,大约阅读时间需要 11 分钟。

结合教程,写出如下关于信号槽的代码,将教程中信号槽两种方式写入同一个界面中。

#include "mainwindow.h"#include 
#include
#include
#include
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 
//使用信号槽必须继承QBject类class Newspaper : public QObject{ //QBject类及其子类,都必须在第一行写Q_OBJECT //该宏应放于头文件中 Q_OBJECTpublic: 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 
#include
class Reader : public QObject{ Q_OBJECTpublic: Reader() {} //槽函数 void receiveNewspaper(const QString & name) { qDebug() << "Receives Newspaper: " << name; }};#endif // READER_H

 

#include "mainwindow.h"#include "newspaper.h"#include "reader.h"#include 
#include
#include
#include
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的同级编辑文件删除,重新编译既可。

输出:

 

转载于:https://www.cnblogs.com/farewell-farewell/p/7159799.html

你可能感兴趣的文章
Raft论文的一些问题
查看>>
Window平台搭建Redis分布式缓存集群 (一)server搭建及性能測试
查看>>
SQL变量与全局变量
查看>>
通达OA 小飞鱼开发培训第四讲 工作流介绍(图文)
查看>>
PhoneGap_百度百科
查看>>
bootstrap基础学习六篇
查看>>
[.net 面向对象程序设计深入](5)MVC 6 —— 构建跨平台.NET开发环境(Windows/Mac OS X/Linux)...
查看>>
我眼中的未来计算机和互联网–读《文明之光》第三冊有感
查看>>
Android横竖屏切换及其相应布局载入问题
查看>>
带辉光效果的跑马灯
查看>>
CSS隐藏元素的几个方法(display,visibility)的区别
查看>>
HTML 中的 dl(dt,dd)、ul(li)、ol(li)
查看>>
Linux下Redis主从复制以及SSDB主主复制环境部署记录
查看>>
如何让win10实现关机确认-暂没确认
查看>>
李洪强漫谈iOS开发[C语言-036]-C语言前四天学习小结
查看>>
JQuery使用deferreds串行多个ajax请求
查看>>
常用js函数整理--common.js
查看>>
java内存泄漏与内存溢出
查看>>
分布式与集群
查看>>
互联网服务器的实现过程需要考虑哪些安全问题 & 加解密及哈希知识点
查看>>