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

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_ptrstd::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的项目&#xff0c;但是一直是带界面&#xff08;QT Widgets&#xff09;程序&#xff0c;前几天收到个需求&#xff0c;是要做个socket服务端的桌面程序&#xff0c;界面有没有都成&#xff0c;然后就想着接着用 QT Widgets 搞&#xff0c;结果辛辛苦苦把socket服…...

[MAUI 项目实战] 笔记App(一):程序设计

文章目录 前言框架定义核心类项目地址 系列文章&#xff1a; [MAUI 项目实战] 笔记App&#xff08;一&#xff09;&#xff1a;程序设计 [MAUI 项目实战] 笔记App&#xff08;二&#xff09;&#xff1a;数据库设计 前言 有人说现在记事类app这么多&#xff0c;市场这么卷&a…...

VisualRules-Web案例展示(一)

VisualRules单机版以其卓越的功能深受用户喜爱。现在&#xff0c;我们进一步推出了VisualRules-Web在线版本&#xff0c;让您无需安装任何软件&#xff0c;即可在任何浏览器中轻松体验VisualRules的强大功能。无论是数据分析、规则管理还是自动化决策&#xff0c;VisualRules-W…...

使用Docker 实现 MySQL 循环复制(三)

系列文章 使用Docker 实现 MySQL 循环复制&#xff08;一&#xff09; 使用Docker 实现 MySQL 循环复制&#xff08;二&#xff09; 目录 系列文章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存储 注意&#xff1a;在做本章节示例时&#xff0c;需要拿单独一台机器来部署NFS&#xff0c;具体步骤略。NFS作为常用的网络文件系统&#xff0c;在多机之间共享文件的场景下用途广泛&#xff0c;毕竟NFS配置方 便&#xff0c;而且稳定可靠。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.理解分布式管理 目前我们学习的所有内容都是在本地来完成的。&#xff08;add /commit /版本撤销回退/分支管理&#xff09; 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&#xff1a;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()函数 功能&#xff1a;数据嗅探 参数&#xff1a; iface: 指定在哪个网络接口上抓包 count: 表示要捕获数据包的数量。默认为0(不限制数量) filter: 流量的过滤规则。使用的是 BPF 的语法 prn:…...

uni-app开发日志:unicloud使用时遇到的问题解决汇总(不断补充)

插件安装后提示与原数据库表冲突&#xff08;2024.7.18&#xff09; 安装uni-admin后再安装uni-cms&#xff0c;在uni-admin中添加好菜单&#xff0c;结果提示该错误 回到hbuilder中uniCloud/database中找到冲突的部分 比较一下&#xff0c;选中老的删除 opendb-news-articl…...

插入排序算法详解

快速排序&#xff08;Quick Sort&#xff09;是计算机科学与技术领域中非常经典的一种排序算法&#xff0c;由C. A. R. Hoare在1960年提出。它应用分治思想进行排序&#xff0c;通过对数据进行分区操作&#xff0c;并递归地对分区后的子序列进行排序&#xff0c;从而达到整个序…...

parallel 详细解析 Java 8 Stream API 中的 parallel 方法

详解Java Stream的并行处理&#xff08;Parallel&#xff09; Java 8 引入了Stream API&#xff0c;提供了一种便捷而高效的方式来处理集合数据。Stream API使得对数据集合的操作变得更为简洁和易读。 其中&#xff0c;并行流&#xff08;parallelStream&#xff09;是Stream …...

不同业务场景下通过mars3d实现绕点旋转效果

1.鼠标单击地图某一处就对该点进行绕点旋转效果 相关代码&#xff1a; 1.相关绕点旋转的初始化代码&#xff1a; const rotatePoint new mars3d.thing.RotatePoint({direction: false, // 方向 true逆时针&#xff0c;false顺时针time: 50 // 给定飞行一周所需时间(单位 秒)&…...

重塑水利未来:智慧水利解决方案的探索与实践,从物联网、大数据到人工智能,科技如何赋能水利行业,实现智慧化管理与决策

本文关键词&#xff1a;智慧水利、智慧水利工程、智慧水利发展前景、智慧水利技术、智慧水利信息化系统、智慧水利解决方案、数字水利和智慧水利、数字水利工程、数字水利建设、数字水利概念、人水和协、智慧水库、智慧水库管理平台、智慧水库建设方案、智慧水库解决方案、智慧…...

IO、进程、线程03

第一题&#xff1a;预习 opendir 和 readdir函数 opendir 和 readdir 是两个在C语言&#xff08;特别是使用POSIX标准的系统&#xff0c;如Linux和UNIX&#xff09;中用于目录遍历的函数。这两个函数属于标准的C库中的目录操作部分&#xff0c;通常与<dirent.h>头文件一…...

算法力扣刷题记录 五十二【617.合并二叉树】

前言 二叉树篇&#xff0c;继续。 记录 五十二【617.合并二叉树】 一、题目阅读 给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#xff08;而另一些不会&#xff09;。你需要…...

Java中的ArrayList和LinkedList有什么区别?

Java中的ArrayList和LinkedList是两种常用的集合实现类&#xff0c;它们都属于Java集合框架的一部分&#xff0c;但它们在内部实现、性能特点、使用场景等方面存在明显的区别。以下是对这两种集合的详细比较&#xff1a; 1. 数据结构差异 ArrayList&#xff1a;ArrayList是动…...

Linux C++ 058-设计模式之解释器模式

Linux C 058-设计模式之解释器模式 本节关键字&#xff1a;Linux、C、设计模式、解释器模式 相关库函数&#xff1a; 概念 解释器模式&#xff08;Interpreter Pattern&#xff09;提供了评估语言的语法或表达式的方式&#xff0c;它属于行为型模式。 解释器模式用于构建一…...

MDK5没有DeviceName

遇到的问题是Jlink驱动问题 不是引脚接反 使用国产GD单片机不同的工程&#xff0c;有的有Device Name,有的没有Device Name&#xff08;下图是弄好的情况&#xff0c;有Device Name&#xff09; 硬件链接&#xff0c;和设备都没有问题&#xff1a;无法仿真&#xff0c;无法下…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...