- 博客(108)
- 资源 (11)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Qt开发之踩雷日记
报错信息:C:\Users\MSI-NB\Desktop\03_SignalAndSlot\SubWidget.cpp:4: error: C2533: “SubWidget::{ctor}”: 构造函数不能有返回类型但构造函数中并没有返回类型啊??原因:定义类的时候没有加 ;构造函数默认把整个类作为返回值了。报错信息:C:\Users\MSI-NB\Desktop\03_SignalAndSlot\SubWidget.h:8: error: C2011: “SubWidge..
2020-07-07 10:56:27
1731
原创 【Qt】QStandardItem更新数据注意事项
直接用setData发现程序退出时会崩溃,可能是因为指针已经被释放掉了。根据item获取对应的索引,通过索引设置data,程序能正常退出。
2024-05-10 11:05:34
301
原创 PyInstaller打包Django项目生成exe文件
打包的时候就会默认使用全局的 Python 环境,在没有虚拟环境的情况下运行项目可能会有一些潜在的问题,比如我在其它项目中需要安装某些依赖,但跟当前项目所需的依赖发生了冲突。当你看到这个,说明打包成功了,dist 目录下也生成了 spec 文件同名的文件夹,可执行程序就在这个文件夹里,且运行程序所需要的依赖都在 _internal 这个文件夹里。正常情况下,这将在 dist 目录中生成一个包含可执行文件的文件夹,我们需要的打包后的 exe 程序就在这个文件夹中,但是事实上并没有那么顺利。
2024-01-05 17:32:03
1652
原创 Qt 鼠标点击事件穿透
【问题描述】在近期开发的过程中遇到这样一个场景:透明的子窗口覆盖于父窗口之上,但需要父窗口中的部件对鼠标点击事件进行正常的响应。正常情况下,由于子窗口覆盖于父窗口之上,鼠标点击事件会被子窗口中的部件获取,而不会被父窗口中的部件获取到,要解决这个问题,就需要让鼠标点击事件穿透子窗口,下发到父窗口的对应部件中。【解决思路】要实现事件的穿透,最关键的就是setAttribute(Qt::WA_TransparentForMouseEvents, true);的使用。这个方法能将当前窗口及其子部件的鼠标事
2022-01-10 22:58:30
9025
4
原创 Qt TreeView选中节点取消背景色
改动前未选中节点时选中节点时会发现虽然已经给TreeView::item:selected和TreeView::branch:selected都设置了background:transparent,但选中节点时依然带有默认的背景色改动后最后修改了TreeView的show-decoration-selected属性,莫名地解决了QTreeView { border:none; background: #0D202D; show-decoration-selected:
2021-12-01 15:35:12
1394
转载 Qt 图片与base64互转
图片转base64QImage image(":/image/wrong");QByteArray ba;QBuffer buf(&ba);image.save(&buf, "png");qDebug() << ba.toBase64();buf.close();base64转图片QString p_b;//base64字符串QPixmap image;image.loadFromData(QByteArray::fromBase64(p_b.toLocal
2021-11-29 15:47:12
595
原创 JavaScript 各种进制间的转换
目录十进制与十六进制的转换十进制与二进制的转换二进制与十六进制的转换十进制与十六进制的转换十进制转十六进制//number.toString(radix);//radix范围2~36,不写就是十进制var num = 255;console.log(num.toString(16));// 十进制转十六进制console.log(num.toString(16).toUpperCase());// 十进制转十六进制,再转大写十六进制转十进制//parseInt(string, radix
2021-10-27 12:05:40
978
原创 JavaScript 浮点数与二进制之间的转换
目录二进制转浮点数浮点数转二进制二进制转浮点数单精度binary_to_float(data){ let buf = new Uint8Array(data); buf.reverse(); let buf32 = new Float32Array(buf.buffer); return buf32[0];}双精度binary_to_double(data) { let buf = new Uint8Array(data); buf.rever
2021-10-27 11:02:25
1705
1
原创 Qt 界面实现的一些小技巧【更新中】
分割线的实现QFrame * line = new QFrame();line->setFrameShape(QFrame::HLine);line->setFrameShadow(QFrame::Sunken);QLabel适应文字内容大小QLabel label;label.setText("label");label.adjustSize(); label.setFixedWidth(label.width());label.setFixedHeight(labe
2021-07-08 17:17:45
575
1
原创 yaml-cpp的编译与使用
编译环境Windows10VS2019cmake-3.19.8-win64-x64准备工具yaml-cpp源码 点此下载yaml-cpp的编译将下载好的yaml-cpp-master.zip进行解压在源码目录下创建一个build文件夹并进入这个文件夹mkdir buildcd build使用cmake指令生成库文件cmake ..接着将会看到在build目录下有一个名为YAM_-CPP.sln的文件,用VS打开它对ALL_BUILD生成解决方案,成功生成后,会在buil
2021-07-05 09:06:21
1424
原创 VLC-Qt的编译与使用 windows10+VS2019+qt5.15
最近要在程序中实现一个能够播放本地视频的内嵌播放器,试过用ffmpeg、QtAV来实现,不是播放的速度有问题,就是在播放flv视频文件时无法调整进度,因此寄希望于vlc-qt。下面是我在windows10 VS2019环境下编译vlc-qt的详细步骤准备工作编译环境windows10 VS2019下载源码包我是用Git工具直接下载的,打开Git Bash,键入git clone git://github.com/vlc-qt/vlc-qt.git进行克隆,完成后源码默认被保存在C:\Users\x
2021-06-25 17:53:34
3027
11
原创 MediaInfo在VS2019下的编译和使用
准备工作下载源码 下载地址MediaInfo编译将下载好的压缩包进行解压,用VS打开MediaInfoLib.sln,生成解决方案(我选择的是Release版本,64位)
2021-06-24 10:30:23
573
1
原创 QtAV的编译、安装和使用
准备工作下载QtAV官方提供的编译好的依赖库 下载地址解压后得到下载QtAV-1.12.0源码 下载地址解压后得到QtAV编译
2021-06-15 13:56:06
2456
1
原创 Qt LINK : fatal error LNK1104: 无法打开文件“xxx.lib”
遇到这个问题实在太多次了,必须记录一下。。【问题现象】原来.pri文件中引入库文件的代码是这样的LIBS += -L$$PWD/$$strPath/$$strLib/ -lavcodec -lavfilter -lavformat -lswscale -lavutil -lswresample -lavdevice -llibrtmp报错信息如下但去掉 -llibrtmp 后重新构建就不会报错,说明问题出在引入librtmp上。【解决过程】试着将llibrtmp库引入语句单独写一行LI
2021-06-10 15:32:31
8391
2
原创 rtmpdump在VS2019下的编译和使用
近期工作业务需要实现接收rtmp流媒体并保存到本地的功能。要实现这个功能,就得用到librtmp这个库,综合了网上看到的好几种方法并进行实际操作,成功地对rtmpdump进行了编译和使用,由于参考的方法叙述会较为简略,因此在这里详细记录编译和使用的过程,也希望能给大家提供帮助。rtmpdump的编译1.下载librtmp的源代码,我下的是rtmpdump-2.3下载地址2.下载zlib的源代码,我下的是1.2.11下载地址3.打开vs2019,创建一个静态库工程,该工程默认保存在C:\Users
2021-06-10 14:16:48
676
1
原创 JavaScript 使用<input type=“file“>无法上传相同文件的坑
【问题现象】使用<input type = "file">标签上传文件时,若两次上传的是同一个文件,服务端接收不到上传文件的http请求。【排查过程】首先要明确问题出在服务端还是web客户端。用Fiddler软件监测,发现两次上传同一个文件,只截获到一个http请求。可以确定问题出在web客户端没有成功发送第二次上传文件的http请求。逐层检查相关函数,发现<input type="file">标签中onchange事件对应的函数没有被调用。【原因】两次上传同一个文件
2021-04-08 16:38:47
807
1
转载 Javascript读取本地文件
出于安全和隐私的原因,web 应用程序不能直接访问用户设备上的文件。如果需要读取一个或多个本地文件,可以通过使用 input file 和 FileReader 来实现。在这篇文章中,我们将通过一些例子来看看它是如何工作的。文件操作的流程①获取文件由于浏览器中的 JS 无法从用户的设备访问本地文件,我们需要为用户提供一种方法来选择一个或多个文件供我们使用。这可以通过文件选择器 <input type='file' /> 来完成。<input type="file">如果想
2021-03-23 10:49:14
10724
原创 Qt 递归与非递归遍历文件【深度遍历/广度遍历/迭代器】
在实现文件传输这一功能的过程中,经常需要遍历文件夹,下面对QT中文件夹的遍历方法做一个整理。文件夹遍历可以归纳为三个主要的步骤:①通过QDir访问目标文件夹②过滤所需的文件类型③获取过滤后的文件信息列表④遍历文件信息列表,取出文件路径并递归调用遍历函数。具体代码如下:实现方法一(递归,深度遍历,代码非常简洁)void CSystemManager::fileTraverse(QString path){ QDir dir(path); if(!dir.exists())
2021-01-05 09:53:48
1134
原创 QtCreator 构建套件时出现红色感叹号的解决方法
【问题现象】大意是64位的编译器无法为32位的Qt版本生成代码。P.S:原来选择的编译器是Microsoft Visual C++ Compiler 16.7.30330.147(amd64),对应的ABI是x86-windows-msvc2019-pe-32bit)【解决方法】对该套件重新进行配置,将64位的ABI改为32位。鼠标移入可以看到编译器对应的ABI的版本,找到版本为x86-windows-msvc2019-pe-32bit的编译器。回到“Kits”选项卡。在指示处找到刚才
2020-12-14 15:56:23
17432
6
原创 Qt 记一次文件传输引发的各种问题【readLine()的使用/缓冲区的flush()刷新机制】
今天在实现文件传输功能的时候,发现图片文件数据传到本地后没有按预期显示出来。核心代码如下:void CFileTransferThread::slotStartTransferFile(QString srcPath, QString extend, QString ip, quint16 port){ //进入这个函数,根据srcPath找到目标文件,以只读方式打开,注意文件不能一次性读取 QFile file(srcPath); file.open(QIODevice::R
2020-11-09 15:19:51
4284
2
原创 linux使用过程中的一些记录
最近的工作涉及到了交叉编译,于是开始和linux打交道。之前这方面的知识是一片空白,所以在这里也只简单记录一些常用的命令和遇到的一些问题的解决方法,之后也会慢慢补充。文件或文件夹被锁定遇到这个问题的背景是我将本地的某个文件夹共享到ubuntu操作系统中,但是某天发现这个文件夹的图标上多了一把小锁,无法进行写入操作。解决方法如下输入命令:sudo chown 用户名 文件夹sudo chown -R 用户名 文件夹e.g:sudo chown -R root /home/docu
2020-11-05 11:39:59
170
1
原创 Qt LNK2001:无法解析的外部符号 未找到文件moc_XXX.obj
由于在运行项目的过程中遇到这个bug实在太多次,特此记录一下,方便今后遇到同样的问题时能更快地解决。STEP1 检查代码第一步肯定要先检查我们的代码是否正确,主要要关注的地方有:① 头文件中,在类的定义里是否添加Q_OBJECT② 类的头文件和源文件是否有缺漏③ 在类的定义中声明的方法是否都有实现STEP2 执行qmake之前报这个错误的时候qmake是有效的,但这次失效了。STEP3 手动添加moc文件这个方法是我在网上看到的,系统提示缺少哪个类的moc文件,就在该.cpp文件中添加#
2020-09-16 20:29:03
5870
1
转载 C++中使用迭代器(iterator)删除元素的注意事项
C++中添加了各种各样的STL容器,不仅数量众多,而且功能强大,如果能够正常使用,可以使我们省去诸多时间。迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址,简单点就是每个“节点”对象的“指针”。但如果对迭代器在不同类型的容器中使用的方法不够熟悉,就可能出现一些问题,下面对迭代器在不同类型的容器中的用法进行总结。关联容器关联容器中的元素是按关键字来保存和访问的,支持高效的关键字查找和访问。关联容器类型如下:关联容器类型
2020-09-07 13:55:49
2698
原创 QtWebApp的使用【在Qt中搭建HTTP服务器】(三)
在前面的学习中,我们编写了几个控制器,这些控制器通过将散布在C ++源文件中的硬编码片段进行级联,来生成HTML文档。源代码看起来没有很好的组织结构,生成的HTML文档也很丑陋。如果要生成更复杂的网站,那现有的代码结构会使这个过程变得很痛苦。因此,整个世界的Web开发人员都在一些替代方案之间进行选择:反其道而行之,将程序代码插入HTML文档,例如JSP和PHP就选择了这种方法。在客户端使用Javascript(AJAX),将服务器提供的原始数据展示在屏幕上。将数据合并到准备好的HTML文件中,然后
2020-09-03 10:24:48
5159
7
原创 QtWebApp的使用【在Qt中搭建HTTP服务器】(二)
目录处理用户输入Session 会话什么是Session为什么要使用Session技术?cookieHTTP重定向国际化静态文件这篇博客介绍了QtWebApp中,form表单、session、cookie的使用。处理用户输入Web应用程序通常处理用户输入。我们将制作一个登录表单,以了解它的使用方法。创建一个新类 LoginController。同样,它源自HttpRequestHandler。//logincontroller.h:#ifndef LOGINCONTROLLER_H#defi
2020-09-01 17:29:10
5236
2
原创 QtWebApp的使用【在Qt中搭建HTTP服务器】(一)
用Qt和QtWebApp能够实现在C++中开发HTTP Web服务器应用程序。首先,需要先安装Qt的软件开发工具包。点此下载其次,下载最新的QtWebApp库。点此下载下载并解压缩QtWebApp ZIP文件。你将会看到:如何使用QtWebApp1)将QtWebApp.zip文件解压到文件夹中,并创建一个名为“ MyFirstWebApp”的新Qt控制台项目。然后,建立如下文件结构:2)将以下行添加到MyFirstWebApp项目的项目文件中:QT += networkinclude(
2020-09-01 09:14:35
24100
14
转载 Qt的main函数参数argc和argv学习总结
1、int main(int argc, char *argv[]):其中argv为指针的指针可以char **argv 或者 char *argv[] 或者 char argv[][]来表示,argc为整数2、具体用法看下面的例子(假设程序的名称为program ):(1)当执行程序时只输入./program,则由操作系统传来的参数为argc=1,表示只有程序名称,argv[0]指向输入的程序路径及名称。(2)当执行程序时输入./program -10,则由操作系统传来的参数为argc=2,表示除
2020-08-25 14:21:16
3065
转载 简说设计模式——观察者模式
什么是观察者模式观察者一般可以看做是第三者,比如在学校上自习的时候,大家肯定都有过交头接耳、各种玩耍的经历,这时总会有一个“放风”的小伙伴,当老师即将出现时及时“通知”大家老师来了。再比如,拍卖会的时候,大家相互叫价,拍卖师会观察最高标价,然后通知给其它竞价者竞价,这就是一个观察者模式。对于观察者模式而言,肯定有观察者和被观察者之分。比如在一个目录下建立一个文件,这时系统会通知目录管理器增加目录,并通知磁盘减少空间,在这里,文件就是观察者,目录管理器和磁盘就是被观察者。 观察者模式(Obser
2020-08-19 23:41:24
294
转载 C++ typedef详解
typedef的用途1)定义一种类型的别名注意typedef并不是简单的宏替换,如下例所示:int main(){ char *pa,pb;//声明了一个指向字符变量的指针pa,和一个字符变量pb pa = "hello"; pb = "hello";//报错,不能将const char*类型的值赋给char类型的实体 pb = 'h';//正常 return 0;}再看以下示例:int main(){ typedef char* PCHAR
2020-08-18 14:33:06
24410
5
原创 TCP的三次握手和四次挥手
三次握手(建立连接)在TCP中,客户端与服务端之所以能够建立可靠的连接,就是因为它们之间发生了三次握手。第一次握手 客户端→服务端一般情况下,一个连接往往都是由客户端主动发起,服务端则被动地等待。要建立一个连接,首先由客户端向服务端发送一个数据包,这个数据包包含了一些关键的信息:SYN=1 建立连接标志位seq=n 计算机随机生成的序号意思是:服务端,我(客户端)要和你建立连接(SYN=1)。第二次握手 服务端→客户端此时,服务端接收到这个数据包,也会发送一个数据包给客户端,作为回应
2020-08-08 22:53:45
222
原创 C++调用多态函数时的坑【隐式类型转换】
昨晚在写bug的过程中,发现了一个让人摸不着头脑的错误。先交代一下发生这个错误的背景:1)定义了一个名为TCP_MSG_HEAD的宏,值为0xBBAA55AA,作为目标TCP数据包的报文头,#define TCP_MSG_HEAD = 0XBBAA55AA;2)调用socket的readAll()方法,返回一个字节数组,也就是当前接收缓冲区里字节流的所有内容,并追加到内存缓冲区。QByteArray readArray=m_pServerTcpSocket->readAll();
2020-08-06 15:52:58
437
原创 Qt学习(十九)—— XML
XML文件和HTML文件一样,是有头有尾的——有开始标签就有对应的闭合标签。XML是用来存储数据的,HTML是用来显示数据的。所以XML标签灵活很多,不像HTML那样,表格就必须是<table>、一级标题就必须是<h1>,XML的标签可以由我们自己来定义,比如在xml中存储一些学生数据:<?xml version="1.0" encoding="UTF-8"?><info> <stu id="1"> <name>joey&l
2020-08-02 14:36:57
681
原创 Qt开发之通过配置.pro文件封装动态链接库(dll)
这两天在实现将类封装成动态链接库的过程中遇到了很多问题,在此记录一下如何利用.pro文件和.pri文件管理我们的项目,并实现、使用动态链接库(DLL)。这是项目的结构树:工程名为tableViewSocket,其中,项目的MVC放在tableView这个子工程中,TCP通讯功能放在Network中,Network被封装成动态链接库。以下是如何将这样一个结构的工程通过.pro和.pri构建出来的步骤。一、创建一个空的工程填好工程名和工程路径,Next到底。Qt在Test工程下自动生成了一个空的
2020-07-31 16:41:31
4890
3
原创 Qt学习(十八)—— 线程应用之画图
今天的目标是将之前学习的绘图和线程结合起来,来实现用线程绘图(……好绕)回顾一下创建一个子线程的流程:1)创建一个自定义线程类,并实现它的线程处理函数(本质是类的成员函数)。2)在主窗口类中创建一个自定义线程对象,再创建一个QThread子进程对象,然后用moveToThread()方法将自定义线程对象移动到子线程中。3)调用start()方法启动子线程。4)调用connect()方法,用户界面触发某些信号时,调用子线程中的槽函数。5)在子线程的槽函数中,也可以向主线程发送信号。6)调用con
2020-07-22 15:32:12
3010
4
原创 Qt学习(十七)—— 线程
为什么要学习线程假设一个单任务程序中有一段非常复杂的数据处理,需要占用很多内存,就很容易使程序发生卡顿、崩溃的现象。比如,在传输大型文件的过程中,发现进度条停滞了,这时候如果我们不耐烦地多点了几下窗口,就很可能会导致窗口无响应。所以,像这种复杂的数据处理不应该放在界面上,而应该把它放到线程中。...
2020-07-21 22:46:45
940
原创 Qt学习(十六)—— TCP文件传输
今天学习TCP文件传输。下面是服务端向客户端发送文件的流程:服务器向客户端发送文件,需要先选择一个文件,然后获取文件的文件名和大小。在文件传输的过程中,往往都要有一个进度条指示当前文件传输的进度,这个进度是由服务器端提供的,那客户端要如何得知文件传输的进度?这就需要服务端在往客户端发送数据之前,先发送一个携带上文件信息的数据过去。客户端从服务端接收到携带文件信息的数据后,要按照一定的协议对字符串进行解析,获取文件的大小、文件名等信息。有了文件名,客户端就可以在本地创建一个同名的文件。接着,服务端开始读
2020-07-20 23:07:07
815
原创 Qt学习(十五)—— 网络通信之UDP
UDP就像写信,写明地址也不能确保对方能收到,TCP就像打电话,只有确定对方是我们要找的人才能进行通话。在Qt的UDP通信中,不区分客户端和服务端,只区分发送端和接收端。无论是发送端还是接收端,都只有一个套接字,也就是QUdpSocket。此外,UDP通信中没有监听listen(),只有绑定bind(),往套接字中读写数据用的是readDataGram()和writeDataGram()。P.S:datagram是数据报 / 数据包 / 数据报文的意思和TCP相同的地方是,发送端向接收端发送数据时,会
2020-07-19 20:47:29
2102
1
vlc-qt-1.2.0库【VS2019+Qt 5.15】
2021-09-06
MediaInfo_VS2019_x64_Release.zip
2021-06-24
testlibrtmp.zip
2021-06-10
librtmp.zip
2021-06-10
【QT】通过配置.pro封装动态链接库(dll)的简单实现
2020-07-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人