QT——信号和槽

11 篇文章 0 订阅
1 篇文章 0 订阅

概念

1.作用:用于在QT的图形控件见传递参数

2.查看控件的槽函数或者信号函数

f1两次看中断的帮助文档,看public function 和public slot (槽)

点父类

找singal(信号)

让按钮有反应加上信号和槽:找singal函数

3.信号的条件

/*信号必须有signals关键字来声明

     * 信号没有返回值,但可以有参数

     * 信号就是函数的声明,只需声明,无需定义

     * 使用:在前面加emit emit mySignal()

     * 信号可以重载

     */

 

注意

①发射信号和跳转时候必须有两个窗口类都初始化了,不能只有一个窗口类声明而另一个没有声明,这样未声明的窗口接收不到信号。

 

应用

1.connect函数(设置按钮按下时候关闭程序窗口)

connect(&b1,&QPushButton::pressed,this,&MainWidget::close);

    connect(&b1,&QPushButton::pressed,this,&MainWidget::close);

    /* &b1:信号发出者,指针类型

     * &QPushButton::pressed:处理的信号, &发送者的类名::信号名字

     * this:信号接受者

     * &MainWidget::close :槽函数,信号处理函数 &接收者的类名::槽函数名字

*/

2.connect函数(b2按钮释放时候隐藏b1)

connect(b2,&QPushButton::released,&b1,&QPushButton::hide);

//注意处理好谁发送谁处理

3.信号重载时候的使用

信号有多少个参数,槽函数也必须有多少个参数。信号参数类型是什么,槽函数也必须是什么。信号带参数的目的是给槽函数传参。

若信号出现重载,会产生二义性,不知道调用哪个信号,需要分别定义一个指向函数的指针标识他们。与2的区别是需要加上一个作用域,声明是哪个SubWidget::的子函数。

    void (SubWidget::*funSignal)()=&SubWidget::mySignal;//不带参数

    connect(&w,funSignal,this,&MainWidget::dealSub);

 

    void (SubWidget::*testSignal)(int,QString)=&SubWidget::mySignal;

    connect(&w,testSignal,this,&MainWidget::dealSlot);

(回顾C++):若有一个函数名为void fun(int x),要声明一个指针指向fun,则void (*p)(int)=fun;

 

 

自定义槽函数

1.定义/*自定义槽,普通函数的用法

               *QT5:任意的成员函数,普通全局函数,静态函数

               * 槽函数需要和信号一致(参数,返回值)

               * 由于信号都是没有返回值,所以槽函数一定会没有返回值

               */

2.实现:

①在头文件加自定义的槽函数声明:void mySlot();

②填写自定义的函数,以及连接信号和槽:

③设置按钮点击抬起后更改按钮显示的内容:connect(b2,&QPushButton::released,this,&MainWidget::mySlot);

connect(b2,&QPushButton::released,this,&MainWidget::mySlot);//用成员函数写

 

lambda表达式

1.配置需要在项目文件中: CONFIG += C++11

2.方便之处:不用定义槽函数不用指定信号接收者

3.传参的解释

①使用:

connect(b4,&QPushButton::released,
            []()
            {
               qDebug() << "111111";

            }

            );

②[]的作用:把外部变量传进来

connect(b4,&QPushButton::released,
            [b4]()
            {
               b4->setText("123");
               qDebug() << "111111";

            }

            );

③一次传多个变量: 用=号:把本函数中所有局部变量、本类中所有成员以值传递

connect(b4,&QPushButton::released,
            [=]()
            {
               b4->setText("123");
               qDebug() << "111111";

            }

            );

④其他传参方法:

            // = :把本函数中所有局部变量、本类中所有成员以值传递

            // this :类中所有成员以值传递

            // & : 把外部所有局部变量,引用符号

&又可能会出现内存问题,用=不会

⑤想要修改参数怎么做:加mutable关键字 :

4.设置lambda表达式返回值:(int)

connect(b4,&QPushButton::released,
            []()-> int 
            {
               qDebug() << "111111";
               return 1;

            }

            );

 

使用界面设置信号和槽

使用界面连接:

 

连接界面的控件连接

用ui->控件名来使用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
qt——服务器客户端进行tcp通信代码.rar是一个使用Qt框架编写的用于实现服务器和客户端之间进行TCP通信的程序。TCP是一种高可靠性的传输层协议,通过它可以实现数据的可靠传输,具有较高的传输速度和较低的错误率。在程序中,服务器端和客户端都可以进行TCP通信,它们之间通过网络连接进行数据的传输和接收。 在程序中,使用了Qt提供的QTcpSocket和QTcpServer两个类来实现TCP通信。QTcpServer类用于实现服务器端,它可以监听指定的端口,等待客户端的连接请求,并实现TCP通信。QTcpSocket类用于实现客户端,它可以主动发起连接请求,并与服务器进行TCP通信。 在程序中,服务器端和客户端都实现了数据的发送和接收,通过使用Qt提供的信号机制来实现。信号表示某个事件的发生,表示某个事件的响应。当服务器端或客户端有数据发送或接收时,发出相应的信号,程序响应相应的来实现数据的发送和接收。 此外,在程序中还使用了一些其他的Qt类和模块,如QDataStream、QByteArray和QHostAddress等,来实现数据的封装和解析,IP地址和端口号的管理等功能。 总之,这个qt——服务器客户端进行tcp通信代码.rar是一个优秀的实现TCP通信的程序,通过它可以学习到Qt框架的使用,以及实现TCP通信的方法和技巧,对于想要开发网络应用的开发者来说是一个非常有用的代码库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值