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文件下编写槽函数的实现;

    }

  • 相关阅读:
    Linux系统下手把手完成无人值守安装服务
    2019年国际网络安全趋势
    Wi-Fi Mesh网络技术
    如何用nginx在本地把9000端口转发到80端口上
    LAMP架构部署和动态网站环境的配置
    智能校服受到多数学生追捧
    热心网友设计出更美的Windows 10开始菜单
    一起来全面解析5G网络领域最关键的十大技术
    如何跟上时代的步伐进入云世界
    c#写入文件流
  • 原文地址:https://www.cnblogs.com/lxuechao/p/12521624.html
Copyright © 2011-2022 走看看