QT:QT与操作系统

文章目录

  • 信号槽与事件
  • QT多线程
    • 概述
    • 原理
    • 完成倒计时程序
  • UDP回显服务器
    • 服务端
    • 客户端

信号槽与事件

在之前的信号槽中,已经有了一个基本的认识,那么对于QT中事件的理解其实就非常的类似,当用户进行某种操作的时候,就会触发事件,去执行一些对应的方法

QT对于事件又进行了封装,就有了信号槽,所以信号槽本身就是对于事件的封装,但是在有些情况下可能信号槽不能覆盖到,所以就需要自己来重写事件的情况,来进行处理该事件

在这里插入图片描述
比如当鼠标进入和离开某个区域时,都会有对应的事件,如果此时这个事件不满足用户的要求,就可以对于这些事件进行对应的处理

QT多线程

概述

本质上来说,这个线程和Linux的多线程是一样的,和线程相关的原理和一些注意点都是Linux线程有关,因此这里不再讲述Linux多线程,只是对于QT中的Linux多线程的用法

原理

在QThread中,一个原理是实例一个对象,然后指定线程的入口函数,创建一个子类,重写其中的run函数,这样就可以使用多态的原理来进行调用

完成倒计时程序

创建一个新的线程,在新线程中进行计时,每一个循环就减一次,然后打印到界面上,就可以完成一个倒计时的效果

重写Thread类

#include "thread.h"Thread::Thread()
{}// 重写run函数
void Thread::run()
{// 只允许一个线程来更新界面// 因此基本思路是每到了一秒就去提醒一下信号槽,让主界面去更新for(int i = 0; i < 10; i++){sleep(1);emit notify();}
}

设置主线程

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 连接信号槽connect(&thread, &Thread::notify, this, &MainWindow::handle);// 启动线程thread.start();
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::handle()
{// 在这里处理基本逻辑,当遇到信号后,就获取屏幕的值,再-1后设置回去int value = ui->lcdNumber->intValue();ui->lcdNumber->display(value - 1);
}

UDP回显服务器

服务端

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QNetworkDatagram>
#include <QString>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);socket = new QUdpSocket(this);this->setWindowTitle("服务器");// 连接信号槽connect(socket, &QUdpSocket::readyRead, this, &MainWindow::handle);// 绑定端口号bool ret = socket->bind(QHostAddress::Any, 8888);if(!ret){QMessageBox::critical(this, "服务器错误", socket->errorString());return;}
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::handle()
{// 处理逻辑主要就是,接收消息,封装响应,把响应发回去// 接收消息const QNetworkDatagram& netDataPro = socket->receiveDatagram();const QString& request = netDataPro.data();// 封装响应const QString& response = process(request);// 把响应发回去QNetworkDatagram responseprogram(response.toUtf8(), netDataPro.senderAddress(), netDataPro.senderPort());socket->writeDatagram(responseprogram);// 把日志打印到界面上QString log = "[" + netDataPro.senderAddress().toString() + ":" + QString::number(netDataPro.senderPort()) + "] req: " + request + ", resp: " + response;ui->listWidget->addItem(log);
}const QString &MainWindow::process(const QString &request)
{return request;
}

客户端

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QString>
#include <QNetworkDatagram>const QString& serverip = "127.0.0.1";
const quint16 serverport = 8888;MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);this->setWindowTitle("客户端");socket = new QUdpSocket(this);// 添加到信号槽connect(socket, &QUdpSocket::readyRead, this, [=](){// 先把信息收回来const QNetworkDatagram responsedatagram = socket->receiveDatagram();// 把信息提取出来const QString& text = responsedatagram.data();// 加到列表中ui->listWidget->addItem("服务端: " + text);});
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{// 先获取输入框信息const QString& text = ui->lineEdit->text();// 把信息打包成请求QNetworkDatagram requestdatagram(text.toUtf8(), QHostAddress(serverip), serverport);// 把请求发过去socket->writeDatagram(requestdatagram);// 添加到列表框ui->listWidget->addItem("客户端: " + text);// 把消息框清空ui->lineEdit->setText("");
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/323715.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【洛谷】动态规划之最长公共子序列

前言&#xff1a; 本系列目的是记录日常所刷的题&#xff0c;有的是自己想出来的题&#xff0c;有的是看了大佬题解后想明白的题 题目 P1439 【模板】最长公共子序列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 前提&#xff1a; 两个排列都是1到n的排列&#xff0c;说…

linux安装 mysql

环境&#xff1a;centOS8 一、安装 1 安装wget库 sudo yum -y install wget 2. 安装 mysql 换yum源 亲测成功&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 换yum源 1.下载对应版本的repo文件 wget -O CentOS-Base.repo http://mirrors…

ESLint: Unexpected ‘debugger‘ statement.(no-debugger)(debugger报红)

ESLint: Unexpected debugger statement.(no-debugger) 解决办法&#xff1a; 找到.eslintrc.js文件中rules的no-debugger更改为0即可

200-500人规模工厂网络方案(中小企业网络)

一、方案概述 工厂一般有单独的弱电房&#xff0c;类似这种 里面采用的方案如下&#xff1a; 主要考虑有线、无线、财务、办公、访客等业务&#xff0c;便于维护管理和后续扩容 还需要 Wi-Fi覆盖零死角高速率&#xff0c;工作不卡顿 同时考虑AV反病毒、IPS入侵防御、用户准…

【LLama】Llama3 的本地部署与lora微调(基于xturn)

系列课程代码文档&#xff08;前2节课可跳过&#xff09;&#xff1a;https://github.com/SmartFlowAI/Llama3-Tutorial 课程视频&#xff1a;https://space.bilibili.com/3546636263360696/channel/series XTuner &#xff1a;https://github.com/InternLM/xtuner/blob/main/R…

内网安全-代理Socks协议路由不出网后渗透通讯CS-MSF控制上线简单总结

我这里只记录原理&#xff0c;具体操作看文章后半段或者这篇文章内网渗透—代理Socks协议、路由不出网、后渗透通讯、CS-MSF控制上线_内网渗透 代理-CSDN博客 注意这里是解决后渗透通讯问题&#xff0c;之后怎么提权&#xff0c;控制后面再说 背景 只有win7有网&#xff0c;其…

对XYctf的一些总结

对XYctf的一些总结 WEB 1.http请求头字段 此次比赛中出现的&#xff1a; X-Forwarded-For/Client-ip&#xff1a;修改来源ip via&#xff1a;修改代理服务器 还有一些常见的字段&#xff1a; GET&#xff1a;此方法用于请求指定的资源。GET请求应该安全且幂等&#xff0c…

C++ 如何进阶?

一、C基础&#xff08;3个月&#xff09; 1、面向对象的三大特性&#xff1a;封装、继承、多态 2、类的访问权限&#xff1a;private、protected、public 3、类的构造函数、析构函数、赋值函数、拷贝函数 4、移动构造函数与接贝构造函数对比 5、深接贝与浅贝的区别 6、空…

超标量处理器设计:重排序缓存(ROB)

★超标量处理器的很多地方用到了重排序缓存&#xff0c;但是我对它不是很了解&#xff0c;所以我整理一下重排序缓存的知识点。 重排序缓存(ROB)在确保乱序执行的指令能够正确地完成和提交(Commit)&#xff0c;也可以用来寄存器重命名。 ROB是一个先进先出的表&#xff0c;每个…

教你解决PUBG绝地求生游戏中闪退掉线无法重连回去的问题

《绝地求生》&#xff08;PUBG&#xff09;&#xff0c;作为一款在全球范围内掀起热潮的战术竞技游戏&#xff0c;以其栩栩如生的战场环境和令人心跳加速的生存冒险博得了广大玩家的青睐。然而&#xff0c;一些玩家在经历了一场惊心动魄的对局后&#xff0c;却面临了一个不大不…

uniapp video 层级覆盖

层级覆盖 cover-view组件 我这里做了个判断 监听全屏时隐藏按钮 根据项目需求自行更改

汉诺塔问题和爬楼梯(递归)

感谢大佬的光临各位&#xff0c;希望和大家一起进步&#xff0c;望得到你的三连&#xff0c;互三支持&#xff0c;一起进步 个人主页&#xff1a;LaNzikinh-CSDN博客 c语言基础_LaNzikinh篮子的博客-CSDN博客 文章目录 一.爬楼梯问题二.汉诺塔问题总结 一.爬楼梯问题 假设你正…

第八篇:深入探索操作系统架构:从基础到前沿

深入探索操作系统架构&#xff1a;从基础到前沿 1 引言 在当今这个高速发展的数字时代&#xff0c;操作系统无疑是计算机科学领域的基石之一。它不仅是计算机硬件与最终用户之间的桥梁&#xff0c;更是实现高效计算和资源管理的关键。操作系统的架构&#xff0c;即其内部结构和…

AIGC 时代软件工程师:前景、需求与大模型提效探究

过去&#xff0c;在互联网浪潮汹涌的十年来&#xff0c;软件工程师的角色愈发凸显其不可或缺的价值。随着AIGC&#xff08;人工智能生成内容&#xff09;时代的到来&#xff0c;软件开发的每个环节都正在经历一场前所未有的革新。今天&#xff0c;我们深入研究了大型AI模型如何…

ETL中如何执行Python脚本

Python的解读 Python 是一种高级、通用的编程语言&#xff0c;由荷兰程序员吉多范罗苏姆&#xff08;Guido van Rossum&#xff09;于1990年代初设计并发布。Python的设计哲学强调代码的可读性和简洁性&#xff0c;它的语法清晰且表达力强&#xff0c;使得开发者能够以更少的代…

【二分查找 滑动窗口】100257找出唯一性数组的中位数

本文涉及知识点 二分查找算法合集 C算法&#xff1a;滑动窗口总结 LeetCode 100257找出唯一性数组的中位数 给你一个整数数组 nums 。数组 nums 的 唯一性数组 是一个按元素从小到大排序的数组&#xff0c;包含了 nums 的所有非空子数组中不同元素的个数。 换句话说&#xf…

QAnything 在mac M2 上纯python环境安装使用体验(避坑指南)

这是一篇mac m2本地纯python环境安装 qanything的文章。安装并不顺利&#xff0c;官方提供的模型无法在本地跑。 这篇文章记录了&#xff0c;使用xinference来部署本地模型&#xff0c;并利用openAi的通用接口的方式&#xff0c;可以正常使用。 记录了遇到的所有的问题&#xf…

安全数据交换系统哪个好?该如何选型?

安全数据交换系统是用于在不同网络或组织之间安全、高效地传输和共享数据的解决方案。安全数据交换系统对于任何需要处理敏感数据、确保数据安全、并满足合规要求的组织来说都是至关重要的。 这种系统通常用于以下目的&#xff1a; 1&#xff09;数据传输&#xff1a;允许用户…

Docker快速搭建NAS服务——NextCloud

Docker快速搭建NAS服务——NextCloud 文章目录 前言NextCloud的搭建docker-compose文件编写运行及访问 总结 前言 本文主要讲解如何使用docker在本地快速搭建NAS服务&#xff0c;这里主要写如下两种&#xff1a; FileBrowser1&#xff1a;是一个开源的Web文件管理器&#xff…

从0到1:低代码如何助力社会组织实现管理数字化

在数字化大时代&#xff0c;创业服务中心的数字化转型显得至关重要。数字化转型不仅是一个技术升级的过程&#xff0c;更是一个涉及业务模式、组织结构、服务方式等全方位的深刻变革。 随着信息技术的快速发展&#xff0c;数字化已经渗透到社会生活的各个领域&#xff0c;成为…