• 6.手动实现信号于槽的连接过程


    手动设置信号

    unix signal

    首先我们大致联想一下unix(linux)下的信号设置方法

    产生者(键盘)接受者.c绑定[signal(id,xxx)]xxx函数处理
    键盘(kill) signal.c singnal(SIGUSR1,do_process) void do_process(int signo);
     //产生者(键盘)
        Kill -SIGUSR1 id//id为进程id即getpid()得到的值;
        Kill -SIGUSR2 id

     
    //接受者.c
     void do_process(int signo);
     int main(){
         prinf("current pid:%d\n",getpid());
         singnal(SIGUSR1,do_process);//当收到信号SIDUSR1时执行后面的函数
         singnal(SIGUSR2,do_process);
         while(1)
         {
             sleep(1);
         }
         return 0;
     }
     void do_process(int signo){
         if(signo==SIGUSR1){
             printf("SIGUSR1\n");
         }else if(SIGUSR2==signo){
             printf("SIGUSR2\n");
         }else {
             printf("unknow signo\n");
         }
     }

    QT 信号与槽

    产生者(按钮等)接 收者绑定[connect()]可以是当前对象或槽去处理
    PushButton ->clicked() this connect(ui~>PushButton, SIGNAL(clicked(bool), this,SLOT(doProcessClick(bool))); void</br>doProcessClick(bool)

    //cpp中声明写在头文件(.h),实现写在.cpp中

    思考过程

      1.首先(发送), 判断QT中是否需要自己发送信号的实现

       "需要":

    /* 1)声明:

    在widget.h(widget只是个举例)的类内声明

    signals://signals事件和public用法在这里相似一个是声明前者声明功能后者声明权限 void sig();

    如下图: image-20200319122351554

    2)实现:

       在widget.cpp中对函数进行实现

         void sig(){ printf("要实现的功能\n"); } */

       ​ "不需要":跳过发送

    2.接受以及槽实现

    1)接受即绑定 connect(ui~>btn_data,SIGNAL(clicend(bool),this, SLOT(doProcessCilck(bool)))image-20200319133701653

    2)声明: 在widget.h(widget只是个举例)的类内声明

    ptivate slots: void doProcessCilck(bool); // ptivate slots:事件和public用法相似

       
    拓展:
        1、signals前面不可加public、private和protected进行修饰;slots前面可以加,因为Qt说槽函数可以当普通函数使用。
    
        2、signals区域的函数必须是void类型,而且这些信号函数没有函数体,也就是说不可以自己定义这些信号函数,你只要声明它就够了,其它不用管,Qt内部自己弄。
    
        3、宏定义和函数指针不能用于信号和槽的参数,信号和槽也不能有缺省参数。
    3)实现: 在widget.cpp文件下编写槽函数的实现;

    }

  • 相关阅读:
    PCA理论与实践
    深度挖掘客户价值—分析角度篇
    多元线性回归理论与实践
    数据分析框架
    Growing转化的每一步(笔记整理)
    kmeans算法原理以及实践操作(多种k值确定以及如何选取初始点方法)
    mysql查询优化(持续更新中)
    mysql 各种运算对于null值的处理
    left join与on,where 结合一起用的异同
    Spark(十一) -- Mllib API编程 线性回归、KMeans、协同过滤演示
  • 原文地址:https://www.cnblogs.com/lxuechao/p/12521624.html
Copyright © 2020-2023  润新知