1. 新建项目SignalAndSlot项目

编写代码如下:

mysignal.h

  1. #ifndef MYSIGNAL_H
  1. #define MYSIGNAL_H
  1.  
  1. #include <QObject>
  1.  
  1. class MySignal : public QObject
  1. {
  1.     Q_OBJECT
  1. public:
  1.     explicit MySignal(QObject *parent);
  1.  
  1. signals:
  1.     void sig();
  1.  
  1. public slots:
  1.  
  1. };
  1.  
  1. #endif

mysignal.cpp

#include
"mysignal.h"

MySignal::MySignal(QObject
*parent)
:

QObject(parent)

{

}

myslot.h

  1.         #ifndef MYSLOT_H
  1. #define MYSLOT_H
  1.  
  1. #include <QObject>
  1.  
  1. class MySlot : public QObject
  1. {
  1.     Q_OBJECT
  1. public:
  1.     explicit MySlot(QObject *parent);
  1.  
  1. signals:
  1.  
  1. public slots:
  1.     void slot();
  1.  
  1. };
  1.  
  1. #endif // MYSLOT_H

myslot.cpp

#include
"myslot.h"

#include
<QDebug>

MySlot::MySlot(QObject
*parent)
:

QObject(parent)

{

}

void
MySlot::slot()

{

qDebug()
<<
"MySlot::slot
is
called";

}

Main.cpp

  1. #include <QCoreApplication>
  1. #include "mysignal.h"
  1. #include "myslot.h"
  1.  
  1. /*
  1. *1)信号的定义必须在signals:保留字下,并且不需要实现
  1. *2)槽的定义必须在slots:保留字下,需要实现
  1. *3)信号和槽通过QObject::connect函数连接
  1. *4)当信号被触发是,槽函数被调用
  1. *
  1. *需要注意的是:
  1. *1) 信号的定义必须在signals:保留字下,并且不需要实现
  1. *2)槽的定义必须在slots:保留字下,需要实现
  1. *3)信号和槽通过QObject::connect函数连接
  1. *4)当信号被触发时,槽函数被调用
  1. *
  1. *需要注意的是:
  1. *1)信号和槽,是QT的拓展,所以实现信号和槽的类,必须是QObject的子类
  1. *2)实现信号和槽的类,必须以宏Q_OBJECT开始
  1. *3)连接信号和槽,要用到SIGNALSLOT宏,转换函数为字符串
  1. *4)一个信号可以和多个槽连接,槽函数调用的顺序是不确定的
  1. *5)多个信号可以同时连接一个槽
  1. *6)信号可以连接信号,形成信号传导
  1. *7)信号和槽的参数应该一样多,而且类型必须相同
  1. *8)信号和槽都可以重载
  1. *9)信号和槽都可以有默认参数
  1. *10)槽函数可以像普通函数一样被调用
  1. *11)在槽函数中,调用sender可以获得信号调用者
  1. *
  1. * 总结下:
  1. * 一个类:QObject
  1. * 三个宏:Q_OBJECT SIGNAL SLOT
  1. * 三个保留字:signals, slots, emit
  1. */
  1. int main(int argc,char** argv)
  1. {
  1.     QCoreApplication app(argc,argv);
  1.  
  1.     MySignal sig;
  1.     MySlot slot;
  1.  
  1.     //通过QObject的connect实现信号和槽函数之间的关联,
  1.     //当调用了信号之后槽函数也相应的被调用了
  1.     QObject::connect(&sig, SIGNAL(sig()), &slot, SLOT(slot()));
  1.     //通过下面一行实现发射一个信号
  1.     emit sig.sig();
  1.     return app.exec();
  1. }

运行结果:

6.QT信号和槽的更多相关文章

  1. QT 信号与槽connect

    QT 信号与槽connect QT 信号与槽connect connect函数调用几个限制 connect函数代码 QT中信号与槽的连接使用的connect函数是一个静态函数,在类QObject中定义 ...

  2. Qt 信号与槽

    Qt信号与槽的理解 信号和槽机制是 QT 的核心机制,要精通 QT 编程就必须对信号和槽有所了解.信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重 ...

  3. QT信号和槽

    QT信号和槽 ============ 信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性.要正确的处理信号和槽,必须借助一个称为 moc(Meta Object Compiler) ...

  4. Qt信号与槽自动关联机制

    参考链接1:http://blog.csdn.net/skyhawk452/article/details/6121407 参考链接2:http://blog.csdn.net/memory_exce ...

  5. Qt信号与槽应用实例一

    ..... connect(m_pGlobelWidget,signal(globeControlClick(object,object)),this,slot(globeControlClick(o ...

  6. Qt 信号和槽函数

    信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性.当某个信号被发射,就需要调用与之相绑定的槽函数.这与Windows下的消息机制类似,消息机制是基于回调函数.一个回调即是一个函数的 ...

  7. QT 信号与槽连接

    转帖 http://www.cnblogs.com/cnhome/archive/2009/10/01/1577277.html 信号(SIGNAL)和槽(SLOT)是Qt编程的一个重要部分.这个机制 ...

  8. Qt信号和槽的个人总结

    1.connect connect(sender,SIGNAL(signal()),receiver,SLOT(slot())); 这里用到了两个宏:SIGNAL() 和SLOT():通过connec ...

  9. QT 信号与槽 QT简单加法器的实现

    信号与槽 背景: 面向过程 模块之间低耦合设计(高内聚). 函数调用: 直接调用 回调调用(低耦合) 面向对象 模块之间低耦合设计(高内聚) 对象调用 直接调用 接口调用 QT: 信号与槽解决问题: ...

  10. 关于Qt信号与槽机制的传递方向性研究(结论其实是错误的,但是可以看看分析过程)

    最近由于项目的需求,一直在研究Qt.信号与槽机制是Qt的一大特色,该机制允许两者间传递参数,依次来实现对象间的通信.这个参数会分别存在于信号的参数列表和槽函数的参数列表中.需要注意的是,若将槽函数绑定 ...

随机推荐

  1. codefroces 911G Mass Change Queries

    题意翻译 给出一个数列,有q个操作,每种操作是把区间[l,r]中等于x的数改成y.输出q步操作完的数列. 输入输出格式 输入格式: The first line contains one intege ...

  2. ●CodeForces 429D Trick_Function

    题链: http://codeforces.com/problemset/problem/429/D题解: 分治,最近点对 不难发现g(i,j)=sum[j]-sum[i], 那么f(i,j)=(i- ...

  3. ●BZOJ 1492 [NOI2007]货币兑换Cash

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1492 题解: 斜率优化DP,CDQ分治 定义$DP[i]$为第i天结束后的最大收益. 由于题 ...

  4. Tenka1 Programmer Contest D - IntegerotS

    Problem Statement Seisu-ya, a store specializing in non-negative integers, sells N non-negative inte ...

  5. [BZOJ]1047 理想的正方形(HAOI2007)

    真·水题.小C本来是不想贴出来的,但是有一股来自东方的神秘力量催促小C发出来. Description 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和 ...

  6. bzoj3224Tyvj 1728 普通平衡树 treap

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 17706  Solved: 7764[Submit][St ...

  7. 实现string类

    /* 实现string类 */ class String {    public:           String(const char *str=NULL); //构造函数           S ...

  8. MySQL数据库将多条记录的单个字段合并成一条记录

    原SQL AND acc.id = accRole.acc_id) AND accRole.role_id = T_PM_ROLE.id ORDER BY acc.id 结果,有一个人有两个角色,如果 ...

  9. 使用linux部署tomcat项目

    1.下载对应的Tomcat服务器包 Apache Tomcat官网下载: http://tomcat.apache.org/download-70.cgi 比如我们使用的是  apache-tomca ...

  10. 硬盘存储计量单位KB、MB、GB大小换算

    一. 预备知识 1. bit与byte 1. bit(简记为 b) 1 bit = 0 or 1 = one binary 2. byte(简记为 B) 1 byte = 8 bits 1字节,8个二 ...