zoukankan      html  css  js  c++  java
  • 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文件下编写槽函数的实现;

    }

  • 相关阅读:
    nginx解决跨域问题(临时应急,最好服务端配置)
    TCP与UDP区别
    图表转图片
    kafka-python开发kafka生产者和消费者
    Django restframework 序列化之 ModelSerializer 小记
    django urls 配置小记
    pycharm 使用Git提交代码到Github
    django rest_framework vue 实现用户列表分页
    Django rest framework ---- 权限
    Django rest framework----认证
  • 原文地址:https://www.cnblogs.com/lxuechao/p/12521624.html
Copyright © 2011-2022 走看看