当前位置: 首页 > news >正文

QT 自定义信号

自定义信号,需要
1.在singnals:区域下写信号函数,以及函数对应的参数
2. 需要emit关键字进行发射信号
3. 在需要处理该信号的其他类中,建立信号和其信号槽函数connect()
4. 在其他类中创建信号处理槽函数

#include "mythread.h"myThread::myThread(QTcpSocket *s)
{socket = s;
}// 对线程的run方法进行重写, 相当于线程处理函数
void myThread::run() {// 启动线程后,应该建立连接,关于readyReadconnect(socket, &QTcpSocket::readyRead, this, &myThread::clientInfoHandler);
}void myThread::clientInfoHandler(){// 线程不能对ui进行操作,只能在创建和ui同名的wiget类中操作// qDebug()<< socket->readAll();// 所以需要在thread中自定义信号,在wiget中用于触发信号和对应槽函数QByteArray b = socket->readAll();emit sendToWidget(b); // 发起信号
}
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 服务端有QTcpServer库,封装了监听操作server = new QTcpServer();// 直接监听,内部根据传入的ip和端口进行绑定server->listen(QHostAddress::AnyIPv4, SERVER_PORT);// 对server进行新的连接信号建立信号槽connect(server, &QTcpServer::newConnection, this, &Widget::newClientHandler);}Widget::~Widget()
{delete ui;
}void Widget::newClientHandler()
{// 将获取到的新的连接套接字中获取客户端ip和端口socket = server->nextPendingConnection();ui->hostLineEdit->setText(socket->peerAddress().toString());ui->portLineEdit->setText(QString::number(socket->peerPort()));// 新的消息到来时,connect 数据read和处理信号槽函数// connect(socket, &QTcpSocket::readyRead, this, &Widget::clientInfoSlot);// 创建线程,来一个连接后,就创建一个线程,在线程中进行socket的数据接收myThread* thread = new myThread(socket);thread->start();// thread线程对象发出信号,widget中建立对应的槽函数connect(thread, &myThread::sendToWidget, this, &Widget::threadMessageSlot);
}void Widget::threadMessageSlot(QByteArray b){ui->chatLineEdit->setText(QString(b));
}void Widget::clientInfoSlot()
{ui->chatLineEdit->setText(QString(socket->readAll()));
}void Widget::on_closeButton_clicked()
{socket->close();
}
http://www.lryc.cn/news/159616.html

相关文章:

  • 注解方式配置SpringMVC
  • 2023年限售股解禁研究报告
  • 『PyQt5-Qt Designer篇』| 08 Qt Designer中容器布局和绝对布局的使用
  • Android 下第一个fragment app 先Java 后Kotlin
  • 行业追踪,2023-09-04
  • Android MQTT:实现设备信息上报与远程控制
  • Python爬虫——新手使用代理ip详细教程
  • idea VCS配置多个远程仓库
  • LKPNR: LLM and KG for Personalized News Recommendation Framework
  • Xshell只能打开一个会话、左边栏消失不见、高级设置在哪儿、快捷键设置解决
  • Android Retrofit 高级使用与原理
  • Unity3D开发流程及注意事项
  • 表单引擎的自定义控件的概念与设计
  • leetcode刷题--栈与递归
  • 自然语言处理——数据清洗
  • MySql学习笔记07——存储引擎介绍
  • Java基础学习笔记-1
  • 以太坊虚拟机
  • 说说BTree和B+Tree
  • 8.1.3 Bit representation and coding - 解读
  • spring 理解
  • 实战SpringMVC之CRUD
  • TCP机制之连接管理(三次握手和四次挥手详解)
  • NLP(3)--GAN
  • 无涯教程-JavaScript - IMLOG2函数
  • SpringBoot复习:(61)拦截器(HandlerInterceptor)的用法
  • 【PyQT5教程】-01入门PyQT5
  • 判断字符串s是否为字符串t的子序列
  • 数据结构之队列的实现(附源码)
  • [A题]2023 年全国大学生数学建模比赛思路、代码更新中.....