Qt Creator 项目Console 项目踩坑日记
最近在做QT的项目,但是一直是带界面(QT Widgets)程序,前几天收到个需求,是要做个socket服务端的桌面程序,界面有没有都成,然后就想着接着用 QT Widgets 搞,结果辛辛苦苦把socket服务的代码写完运行后,用netCat工具指令 nc localhost 1234 模拟客户端去连接socket,一直连不上。。。。
此处连不上是第一个坑:排查命令行用指令搜了所有监听1234端口(我socket服务器代码监听的端口就是1234)的指令,发现搜不到,说明监听根本就没启动,但是代码没报错,中间查阅贼多资料,没结果,直接说结果吧,【服务端项目创建的时候必须选Console Application!】,最后用这个重新见了个项目,同样的代码, nc localhost 1234连上了!!!怀疑是二个创建的权限不一样。
接着开发。。。。。。。到写这个服务端应用更新程序功能的时候,发现下载代码zip的代码没生效,下载文件的目录一直是空的,然后换了好几种写法,发现都不行,然后测试发现同样的下载代码放到main.cpp的main函数下面是可以下载成功的,但是放到别的cpp下就不行!问AI Chat 他说
DownLoader的生命周期在使用的时候被销毁了,然后就想着既然main函数下可以,那可以把DownLoader对象一直穿到使用的cpp不就行了,然后在使用的cpp的构造函数中把它给穿进去了,然后就在构造里接收这个对象的时候报错了 代码如下:
Business::Business(QString device_id,QString identifying,Downloader downloader2) : QObject() { Downloader downloader1 = downloader2;}
上述代码 中Downloader downloader1 = downloader2; 报错了。。。
接着查原因是:Downloader 对象不能直接拷贝。通常,Qt 中的 QObject 及其派生类(如 Downloader)都是禁止拷贝的,因为它们涉及到复杂的资源管理和对象层次结构。
然后又get到了个新知识点 智能指针(例如 std::shared_ptr 或 std::unique_ptr)来管理 Downloader 对象,或者确保只传递 Downloader 对象的引用或指针。
然后把代码改成如下了:main.cpp的main函数传参:
auto downloader = std::make_shared<Downloader>(); Business* b = new Business(cpuid,identifying,downloader);
Business的构造改成如下:
Business::Business(QString device_id,QString identifying,std::shared_ptr<Downloader> downloader2) : QObject(), downloader1(downloader2) {
}
然后在这个构造函数里用downloader1下载测试了下,也下载成功了!说明排查的方向没有错,继续。
在需要下载的地方(我的是mqtt消息的回调函数里)全部使用downloader1进行下载,然后又遇到了第三个报错!,如下:
QObject: Cannot create children for a parent that is in a different thread. (Parent is QNetworkAccessManager(0x57ea93b13d48), parent's thread is QThread(0x57ea93b0ebc0), current thread is QThread(0x740ebc0013a0)
说是线程不一致,然后用到了信号和槽函数,修改后的Business的构造如下:
Business::Business(QString device_id,QString identifying,std::shared_ptr<Downloader> downloader2) : QObject(), downloader1(downloader2){
connect(this,SIGNAL(test111(const QString&)),this,SLOT(test222(const QString&)));
}
然后在mqtt回调中执行发信号
emit test111(downloadUrl);
在槽函数 中用downloader1进行下载
void Business::test222(const QString str){
qDebug() << "======================================Download Url:" << str;
QString url = str; // 替换为你要下载的文件的 URL
QString savePath = "/home/xxxxxxxx/build-socket_server_ttt-Desktop_Qt_5_13_1_GCC_64bit-Debug/tfcard/AAAAAA"; // 替换为保存文件的路径
downloader1->downloadFile(url, savePath);
QObject::connect(downloader1.get(), &Downloader::downloadProgress, [](qint64 bytesReceived, qint64 bytesTotal) {
qDebug() << "Download progress:" << bytesReceived << "/" << bytesTotal;
});
QObject::connect(downloader1.get(), &Downloader::downloadFinished, []() {
qDebug() << "Download finished!";
});
}
测试发了下mqtt消息过去,下载成功了 !QT也是才自学了几天,被这几个问题搞了二三天,记录一下,下不再犯。
相关文章:
Qt Creator 项目Console 项目踩坑日记
最近在做QT的项目,但是一直是带界面(QT Widgets)程序,前几天收到个需求,是要做个socket服务端的桌面程序,界面有没有都成,然后就想着接着用 QT Widgets 搞,结果辛辛苦苦把socket服…...
[MAUI 项目实战] 笔记App(一):程序设计
文章目录 前言框架定义核心类项目地址 系列文章: [MAUI 项目实战] 笔记App(一):程序设计 [MAUI 项目实战] 笔记App(二):数据库设计 前言 有人说现在记事类app这么多,市场这么卷&a…...
VisualRules-Web案例展示(一)
VisualRules单机版以其卓越的功能深受用户喜爱。现在,我们进一步推出了VisualRules-Web在线版本,让您无需安装任何软件,即可在任何浏览器中轻松体验VisualRules的强大功能。无论是数据分析、规则管理还是自动化决策,VisualRules-W…...
使用Docker 实现 MySQL 循环复制(三)
系列文章 使用Docker 实现 MySQL 循环复制(一) 使用Docker 实现 MySQL 循环复制(二) 目录 系列文章1. 在主机上安装MySQL客户端2. 配置循环复制拓扑2.1 进入容器2.2 创建复制用户并授予复制权限2.3 复位二进制日志2.4 配置环形复…...
Spring如何管理Mapper
目录 一、背景二、猜测三、源码查看步骤1、创建MapperScannerConfigurer.java2、MapperScan注解3、MapperScannerRegistrar执行registerBeanDefinitions方法4、MapperScannerConfigurer执行postProcessBeanDefinitionRegistry方法5、执行doscan6、设置beanClass7、使用jdk生成代…...
NFS存储、API资源对象StorageClass、Ceph存储-搭建ceph集群和Ceph存储-在k8s里使用ceph(2024-07-16)
一、NFS存储 注意:在做本章节示例时,需要拿单独一台机器来部署NFS,具体步骤略。NFS作为常用的网络文件系统,在多机之间共享文件的场景下用途广泛,毕竟NFS配置方 便,而且稳定可靠。NFS同样也有一些缺点&…...
「Vue组件化」封装i18n国际化
前言 在Vue应用中实现国际化(i18n),通常需要使用一些专门的库,比如vue-i18n。本文主要介绍自定义封装i18n,支持Vue、uniapp等版本。 设计思路 一、预期效果 二、核心代码 2.1 i18n.xlsx文件准备 2.2 脚本执行 根目录main.js根目录locali18n.xlsxnode main.jsmain.js 文件…...
【Git远程操作】理解分布式管理 | 创建远程仓库
目录 1.理解分布式管理 多人协作开发 2.创建远程仓库 2.1仓库名&路径 2.2初始化仓库&设置模板 1.理解分布式管理 目前我们学习的所有内容都是在本地来完成的。(add /commit /版本撤销回退/分支管理) Git是一个分布式 的版本控制系统。 分支…...
OJ-0718
示例1 input 3 1 1 1 output 0示例2 input 3 3 7 10 output 1示例3 input 4 3 7 10 16 output 3题解1:List {public static void main(String[] args) {Scanner in new Scanner(System.in);int num in.nextInt();List<Integer> list new ArrayList<…...
python抓包 -- 用wireshark抓包、解析--scapy、PyShark
一、 安装scapy模块 1、打开DOS命令行 python -m pip install scapy2、sniff()函数 功能:数据嗅探 参数: iface: 指定在哪个网络接口上抓包 count: 表示要捕获数据包的数量。默认为0(不限制数量) filter: 流量的过滤规则。使用的是 BPF 的语法 prn:…...
uni-app开发日志:unicloud使用时遇到的问题解决汇总(不断补充)
插件安装后提示与原数据库表冲突(2024.7.18) 安装uni-admin后再安装uni-cms,在uni-admin中添加好菜单,结果提示该错误 回到hbuilder中uniCloud/database中找到冲突的部分 比较一下,选中老的删除 opendb-news-articl…...
插入排序算法详解
快速排序(Quick Sort)是计算机科学与技术领域中非常经典的一种排序算法,由C. A. R. Hoare在1960年提出。它应用分治思想进行排序,通过对数据进行分区操作,并递归地对分区后的子序列进行排序,从而达到整个序…...
parallel 详细解析 Java 8 Stream API 中的 parallel 方法
详解Java Stream的并行处理(Parallel) Java 8 引入了Stream API,提供了一种便捷而高效的方式来处理集合数据。Stream API使得对数据集合的操作变得更为简洁和易读。 其中,并行流(parallelStream)是Stream …...
不同业务场景下通过mars3d实现绕点旋转效果
1.鼠标单击地图某一处就对该点进行绕点旋转效果 相关代码: 1.相关绕点旋转的初始化代码: const rotatePoint new mars3d.thing.RotatePoint({direction: false, // 方向 true逆时针,false顺时针time: 50 // 给定飞行一周所需时间(单位 秒)&…...
重塑水利未来:智慧水利解决方案的探索与实践,从物联网、大数据到人工智能,科技如何赋能水利行业,实现智慧化管理与决策
本文关键词:智慧水利、智慧水利工程、智慧水利发展前景、智慧水利技术、智慧水利信息化系统、智慧水利解决方案、数字水利和智慧水利、数字水利工程、数字水利建设、数字水利概念、人水和协、智慧水库、智慧水库管理平台、智慧水库建设方案、智慧水库解决方案、智慧…...
IO、进程、线程03
第一题:预习 opendir 和 readdir函数 opendir 和 readdir 是两个在C语言(特别是使用POSIX标准的系统,如Linux和UNIX)中用于目录遍历的函数。这两个函数属于标准的C库中的目录操作部分,通常与<dirent.h>头文件一…...
算法力扣刷题记录 五十二【617.合并二叉树】
前言 二叉树篇,继续。 记录 五十二【617.合并二叉树】 一、题目阅读 给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要…...
Java中的ArrayList和LinkedList有什么区别?
Java中的ArrayList和LinkedList是两种常用的集合实现类,它们都属于Java集合框架的一部分,但它们在内部实现、性能特点、使用场景等方面存在明显的区别。以下是对这两种集合的详细比较: 1. 数据结构差异 ArrayList:ArrayList是动…...
Linux C++ 058-设计模式之解释器模式
Linux C 058-设计模式之解释器模式 本节关键字:Linux、C、设计模式、解释器模式 相关库函数: 概念 解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。 解释器模式用于构建一…...
MDK5没有DeviceName
遇到的问题是Jlink驱动问题 不是引脚接反 使用国产GD单片机不同的工程,有的有Device Name,有的没有Device Name(下图是弄好的情况,有Device Name) 硬件链接,和设备都没有问题:无法仿真,无法下…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...
