QT学习记录
文章平均质量分 59
记录自己的学习历程
贝勒里恩
用生命写代码,用灵魂做界面!
展开
-
Qt零碎记录
一、隐藏状态栏窗口this->setWindowFlags(Qt::SubWindow);运行软件后,状态栏一般都会有一个软件的标志,使用此行代码可以将状态栏窗口隐藏起来原创 2022-02-14 11:03:34 · 1437 阅读 · 0 评论 -
Linux下Qt程序打包
在Windows下进行Qt开发,软件开发好之后可以使用windeployqt进行打包,然后程序就可以移动到其它电脑上运行了在Linux下同样可以进行打包,使用linuxdeployqt。原创 2024-07-15 17:14:22 · 607 阅读 · 0 评论 -
Linux下使用Qt + libpcap
Libpcap是的英文缩写,即数据包捕获函数库。该库提供的C函数接口用于捕捉经过指定网络接口的数据包,该接口应该是被设为混杂模式。这个在原始套接子中有提到。著名的软件TCPDUMP就是在Libpcap的基础上开发而成的。Libpcap提供的接口函数实现和封装了与数据包截获有关的过程。Libpcap提供了用户级别的网络数据包捕获接口,并充分考虑到应用程序的可移植性。Libpcap可以在绝大多数Linux平台上运行。Wincap。它的工作在上层应用程序与网络接口之间。数据包捕获:捕获流经网卡的原始数据包。原创 2024-05-16 17:01:57 · 949 阅读 · 0 评论 -
VS2017搭建Qt开发环境
2、E1696 无法打开源文件 “ui_QtWidgets.h” QtWidgets。直接点击安装即可,安装好之后关闭VS,等待升级成功即可!3、VS 2017安装Qt插件。2、安装Qt 5.14.2。1、Qt无法打开ui文件。1、安装VS 2017。原创 2024-04-22 12:41:05 · 531 阅读 · 0 评论 -
Qt使用miniblink第三方浏览器模块
Qt编写地图综合应用58-兼容多浏览器内核用Qt做项目过程中,遇到需要用到浏览器控件的项目,可能都会绕不开一个问题,那就是从Qt5.6版本开始mingw编译器的Qt构建套件,不再提供浏览器控件了,之前还可以用webkit。原创 2024-04-16 11:32:18 · 1101 阅读 · 0 评论 -
QGraphicsItem器件移动及旋转相关问题
官方注释:在父坐标系中根据坐标pos设置图元的位置。如果图元没有父图元,pos就是场景坐标系。当然,也可以从构造函数中传递参数设置父子层级。原创 2023-12-29 16:31:51 · 600 阅读 · 0 评论 -
C/C++ 静态代码检查工具cppCheck
Cppcheck是一个用于C/C++代码的静态分析工具,它可以帮助开发者检测代码中的错误;Cppcheck可以检测出许多类型的错误,包括语法错误、未使用的函数、内存泄漏、未初始化的变量等;Cppcheck还支持用户自定义规则,这使得开发者可以根据自己的需求定制Cppcheck的行为;使用--suppress如果你想要忽略某些警告,可以在命令行中使用 --suppress 选项。原创 2023-12-13 16:16:15 · 1582 阅读 · 2 评论 -
Qt嵌入外部进程
Qt可以嵌入任意外部.exe程序。原创 2023-06-09 15:28:54 · 2398 阅读 · 5 评论 -
Qt显示数学公式
目前项目中需要显示数学公式,本来打算采用markdown,但是试了多种方式都不行,然后想过Latex,后面发现MathML,效果还不错,XML格式,然后XML解析的公式可以显示在QtMmlWidget控件中,也可以导出图片,显示在QLabel上。原创 2023-04-14 18:19:57 · 1501 阅读 · 0 评论 -
Qt调用Chrome浏览器
最近有个小项目需要跳转网页,之前有了解过,但是没有在项目中使用过Qt网页嵌入;结合自己之前的博客,有如下两种技术可以实现我的需求:1、2、然后就想到了调用Chrome浏览器的方案!原创 2023-03-21 11:59:41 · 4198 阅读 · 1 评论 -
Qt QProcess使用总结
用引用类型,他会自动回收,当start执行完毕之后,程序认为QProcess已经完成使命了,自动回收,但是此时程序正在执行中,这样回收会导致强行退出,出错。:如果是start则回调都可以正常接收到信息;经测试发现,只有在readyRead回调下面使用readAll来读取,才可以读取到数据。经测试,只有在外部程序返回之后才能获取到不管是main的返回值,还是打印输出数据。started和finished是我做的调试输出,中间那一行是报错。此函数处于阻塞状态,与waiForFinished是一样的。原创 2023-03-14 17:44:26 · 478 阅读 · 0 评论 -
Qt Creator添加自定义向导
在Qt Creator中,当我们选择新建时,Qt自带了很多选项;如果我们在开发过程中,需要频繁的创建某一固定格式的工程,我们每次都要新建各种各样的文件,特别繁琐;能不能像Qt新建工程那样,进行一些简单的配置,然后自动生成一个我们需要格式的工程呢?在字符串、JSON配置文件、模板源文件中,通过语法【%{}】来使用定义的变量;%{JS:},它会对给出的 JavaScript 表达式求值并将结果转化为字符串;原创 2023-01-13 17:13:15 · 1257 阅读 · 1 评论 -
Qt基于QMediaPlayer音视频播放
打开Qt的示例,可以找到Media Player Example,这是一个Qt官方提供的简易视频播放器示例,基于QMediaPlayer实现。6isd。原创 2023-01-09 11:02:32 · 1275 阅读 · 5 评论 -
Qt自定义类使用QSS换肤
在Qt中,我们可以使用QSS来定制软件的样式,QSS提供了各种【选择器】、【属性】、【伪状态】等来帮助我们实现这一目的,但是似乎这些都是针对Qt提供的内部类,由于一些特定的需求,我们有些时候需要自定义控件,那自定义的控件不是Qt提供的内部类,能不能用QSS来定制样式呢?答案是可以的,接下来我们就来看看具体的步骤吧!首先我们先正常自定义一个控件类,这个类必须继承自QWidget,因为QSS只对QWidget及其子类有效;Q_OBJECT。原创 2022-10-09 11:09:50 · 1317 阅读 · 0 评论 -
Qt基于Echart的数据可视化2--Echart大小跟随Qt窗口
Qt基于Echart的数据可视化,调整Qt窗口大小,Echart大小随之调整。原创 2022-09-29 16:47:06 · 402 阅读 · 0 评论 -
Qt鼠标跟踪
最近一个小项目需要动画交互:鼠标进入区域,显示动画(循环);鼠标离开区域,停止动画;思路:动画采用视频播放肯定不现实,所以改为QLabel切换图片来显示动画(有足够的视频帧)。继承QLabel重写显示动画的类,在内部定义一个区域变量、一个新状态变量、一个旧状态变量;如果进入区域,则旧变量等于新变量,新变量为true;如果离开区域,则旧变量等于新变量,新变量为false;最后如果两个状态量不同,则说明需要改变:!!!特别注意!!!鼠标移动事件 默认需要点击之后移动才触发事件,设置之后才可以直接移动就触发事原创 2022-06-23 17:54:45 · 1517 阅读 · 0 评论 -
Qt滚动区域QScrollArea
在软件开发中,软件中经常有些区域是动态布局的,这就让你很难预测该区域的大小,在布局时就不能将其大小固定死,滚动区域就发挥了很大的用处,使用滚动区域,就算动态布局,也可以可大可小。QScrollArea实际是一个嵌套容器,它由两部分组成:scrollArea、scrollAreaWidgetContents;...原创 2022-06-20 11:50:56 · 5316 阅读 · 3 评论 -
软件添加官方案例功能模块
在软件开发中,用户第一次接触软件,肯定是先去找官方例子,方便快速查看软件效果,例如Qt Creator的官方案例页面就很不错:1、控件形如一张卡片,上部为图片,下部为描述文字;2、控件默认无边框,鼠标悬浮显示边框,并切换页面二(显示详细描述信息);3、控件可点击,获取相关信息;4、控件布局:控件采用流式布局,在QScrollArea中进行布局;5、控件自动检测:控件以文件夹为单位,每个文件夹中存在三个文件:示例图片、简要说明文档、工程文件;6、如果没有工程文件,则作废;如果没有示例图片,则使用原创 2022-06-14 16:28:22 · 218 阅读 · 0 评论 -
QSettings保存系统配置
有时候,我们需要根据本地的配置文件,去配置我们的程序,在其他语言中,可能需要自己去写读写文件的逻辑,而在QT中,就直接提供了QSettings类,简化了我们的操作!原创 2022-06-09 10:48:07 · 364 阅读 · 0 评论 -
Qt保存和恢复页面布局
动态调整界面布局时,布局的保存和恢复技巧原创 2022-06-08 13:31:05 · 2970 阅读 · 0 评论 -
QDockWidget嵌套布局--仿PS组件拖拽/吸附效果
QDockWidget的使用示例,仿PS的组件窗口效果。原创 2022-06-06 11:09:37 · 1236 阅读 · 2 评论 -
添加最近打开文件功能--开发思路
一、前言很多软件,启动软件时都会自动打开最近打开的文件,也会添加最近打开文件列表,供用户快速启动工程,这是个挺实用的功能,在此记录一下自己的思路,仅供参考,不喜勿喷,谢谢!二、效果展示三、思路分析软件启动后能记录之前打开的文件列表,这个肯定是需要将文件列表写入本地文本文件中的。我的策略是在打开工程的时候,将所打开工程的绝对路径写入文本文件中,然后在程序启动的时候读取文本文件。打开工程执行完写文本文件的时候,也需要重新读一下文本文件,更新一下菜单栏选项。关键代码class MainWindo原创 2022-03-02 10:20:19 · 844 阅读 · 0 评论 -
Qt线程池
一、前言在并发编程时,通常会把一些相对比较耗时的操作放进线程中运行,例如写聊天室程序时,多个用户登录服务器,如果没有并发处理的话,多个用户同时收发信息,可能会出现收不到信息或者收信息延迟很久的情况,所以每个用户登录服务器,就为他单独开辟一个线程,这样虽然一定程度上解决了问题,但是大量线程的创建和销毁需要和系统交互,会产生很大的开销。若需要频繁的创建线程,建议使用线程池。线程池可以维护一定数量的线程,只需要向线程池中丢任务就行,线程池会根据自己可使用线程数进行任务调度。可以理解为多个窗口服务,只排一个原创 2022-02-24 17:19:54 · 3519 阅读 · 2 评论 -
Qt进程间使用Windows API通信
一、前言最近在想Qt如何远程更新程序,Qt将程序打包发布之后,如果在代码中做了一些细微的修改,只需要更新xxx.exe即可更新程序。如果没有自动远程更新程序,则需要我们自己将可执行程序发给对方,这样很麻烦。所以在程序中增加一个更新模块,一启动或按键触发去比对远程服务器上的软件版本号,如果软件版本号高于当前版本号,则弹窗选则更新或取消。然后把可执行文件下载下来,删除原先的可执行文件,把新下载的可执行文件改名,并放到合适的路径即完成远程更新。问题就在如果我下载完,把程序关闭了(删除原先的可执行文件),谁去做原创 2021-11-26 11:30:32 · 1465 阅读 · 0 评论 -
Qt单元测试框架
一、工程准备QTestLib框架提供了一个简单易用的单元测试框架,创建工程如下:Requires QApplication选项为程序添加QApplication类;Generate initialization and cleanup code选项为添加初始化与清除代码(函数);二、使用说明新建的测试工程如下:注意事项每一个测试类中的每一项测试条目必须在Qt槽中(private slots),否则无法调用;单元测试不具有main函数,测试条目会顺序执行;initTest原创 2021-10-26 11:50:30 · 2943 阅读 · 0 评论 -
Qt处理多屏程序
一、前言随着时代的进入,人们对屏幕早已习以为常。所以大家追求越来越大的屏幕,确实大屏给人的震撼感很强。大屏通常是使用众多小屏幕拼接组成的,通常有扩展模式、复制模式。扩展模式:所有屏幕一字排开,组成长条形(宽*n - 高)屏幕,如下所示:复制模式:所有屏幕显示相同的画面将屏幕接好之后,打开设置可以设置屏幕模式:二、关键代码#include <QDesktopWidget>//获取屏幕信息QDesktopWidget* desktop = QApplication::de原创 2021-09-28 16:36:19 · 3351 阅读 · 0 评论 -
Qt使用QAxWidget调用Windows组件记录
1、播放视频、音频调用Windows Media Player - https://blog.csdn.net/Mr_robot_strange/article/details/1196698252、访问网页axWidget= new QAxWidget;axWidget->resize(1920,1080);//设置ActiveX控件为IEMicrosoft Web Browser//设置ActiveX控件的id,最有效的方式就是使用UUID//此处的{8856F961-340A-1原创 2021-09-24 11:08:50 · 1504 阅读 · 0 评论 -
Qt添加撤销-前进动作
一、前言很多软件中,都有Ctrl-Z撤回的操作,例如visio、Word等一些编辑器。在使用软件的时候,难免会有手误操作,例如,我码了一堆的字,想全选-复制,结果全选-删除了,还没有保存,如果没有撤回功能的话,字就白码了,还得重复一遍,所以软件有回撤功能是挺方便的。二、Qt中的回撤栈类功能说明QUndoStack一个用来装QUndoCommand命令的栈QUndoCommand所有命令的基类QUndoView用来显示栈内容的视窗三、使用流程1、创建QU原创 2021-09-16 15:39:57 · 2419 阅读 · 2 评论 -
Qt流式布局
Qt官方没有吧流式布局集成到IDE中,如果需要的话,可查阅官方案例:https://doc.qt.io/qt-5/qtwidgets-layouts-flowlayout-example.html直接把源码copy到自己新建的类中即可使用,源码如下:#ifndef FLOWLAYOUT_H#define FLOWLAYOUT_H#include <QLayout>#include <QRect>#include <QStyle>class FlowL原创 2021-08-31 16:40:23 · 1146 阅读 · 0 评论 -
Qt状态机框架
一、前言Qt中的状态机为我们提供了很多API和类,使我们能更容易的在自己的应用程序中集成状态动画。这个框架是和Qt的元对象系统紧密结合在一起的。比如:各个状态之间的转换是通过信号触发的;状态可被配置为设置QObject对象的属性;状态可被配置为调用QObject对象的方法;状态机中的状态图是分层次的,一些状态可以被嵌套到另一些状态里,当前的状态机配置是由当前活动的所有状态组成的,在一个状态机的有效配置中的所有状态具有共同的祖先。二、简单状态机实例简介:这个状态机只有三个状态:s1、s2原创 2021-08-30 16:51:17 · 680 阅读 · 0 评论 -
Qt调用cmd
一、效果展示二、关键代码QProcess process;QString cmd = "ping 127.0.0.1";process.start(cmd);process.waitForStarted();process.waitForFinished();text->append(QString::fromLocal8Bit(process.readAllStandardOutput()));三、完整代码#ifndef MAINWINDOW_H#define MAINW原创 2021-08-26 15:41:45 · 4169 阅读 · 3 评论 -
Qt操控Windows Media Player
一、前言对于Windows平台,Qt有特有的模块来调用ActivityX控件比如调用WMP,首先需要知道WMP的CLSID:{6BF52A52-394A-11D3-B153-00C04F79FAA6}二、效果展示三、具体步骤1、在工程文件(.pro)中添加库QT += axcontainer2、添加头文件#include <QAxObject> //用于操作WMP对象#include <QAxWidget> //用于显示WMP3、添加WMPaxWid原创 2021-08-13 11:25:42 · 1539 阅读 · 1 评论 -
Qt调用百度AI接口--车牌识别
文章目录一、前言二、运行结果三、详细过程1、注册百度智能云2、购买服务3、创建应用4、申请access_token5、Qt调用一、前言当下的人工智能势头很盛,虽然咱不是搞算法开发的,但是也不妨碍咱用他们的成果做应用,出于好奇,探索了一下如果使用Qt连接百度AI接口,下面是整个详细历程。二、运行结果三、详细过程1、注册百度智能云网站链接:https://cloud.baidu.com/?from=console2、购买服务百度API商城:https://apis.baidu.com/原创 2021-06-30 16:09:55 · 4437 阅读 · 1 评论 -
Qt单实例程序-->禁止程序多开
一、前言Qt编写的程序,默认是可以多开的,但是有些时候,我们不希望程序可以同时打开多个,这时候就需要对程序的启动添加限制策略,阻止程序多开。二、常用的三种方法1、使用共享内存原理:运行主函数前线访问固定的共享内存段,看看有没有被使用。如果没有使用该内存段,就继续运行程序;如果使用了该内存段,就报警并退出;使用:修改前#include "widget.h"#include <QApplication> int main(int argc, char *argv[]原创 2021-06-29 12:01:16 · 3100 阅读 · 3 评论 -
Qt--exec()和show()的区别
一、前言在Qt开发过程中,肯定经常会使用exec()和show()来显示窗口,这两个函数都可以实现这个目的,但是有什么区别呢?二、窗口模式要理清两个函数的区别,还需要理解窗口模式:模式窗口:窗口会原地阻塞,只能操作该窗口,其余窗口不能再操作;只有关闭该窗口后,代码处才会获得返回值,阻塞停止,就可以操作其它界面了;半模式窗口:窗口会原地伪阻塞,虽然也是只能操作该窗口,其余窗口不能再操作,但是代码会继续往下运行,所以说是伪阻塞;非模式窗口:窗口不会阻塞,可以随意操作;三、exec()和sh原创 2021-05-26 14:26:08 · 2950 阅读 · 0 评论 -
SVG--xml标签语法总结
1、<svg>标签功能:顶层标签,svg代码都放在<svg>之中<svg width="100%" height="100%" xmlns="http://www.w3.org/2000/svg"> ... </svg>2、<circle>标签功能:该标签代表圆形,cx、cy是圆心,r是半价<svg width="100%" height="100%" xmlns="http://www.w3.org/2000/s原创 2021-04-29 16:15:18 · 1953 阅读 · 0 评论 -
Qt--匿名函数Lambda表达式详解
一、简介C++11中引入了lambda表达式,lambda表达式可以使代码变得简单。C++中,一个lambda表达式表示一个可调用的代码单元。对于一个简单的计算,我们可以通过定义函数的形式,或者使用匿名函数的方法来实现。当然,如果这个函数功能十分简单,不会被重复使用,又不至于单独写一个函数,可以通过匿名函数简化代码。二、使用说明2.1、引入C++11在工程文件(.pro)中引入C++11:2.2、Lambda表达式语法[capture](parameters) mutable ->r原创 2021-04-23 17:34:22 · 4187 阅读 · 5 评论 -
Qt--XML解析
一、XML基础1.1、XML是什么?XML是一种可扩展标记语言,很类似于HTML,其文件仅仅是纯文本而已;XML的设计宗旨是传输数据,而非显示数据;1.2、XML语法XML文档形成了一棵“倒挂的树结构”,从“根部”开始,然后扩展到“枝叶”;XML标签一定是成对出现的,必须有根元素;XML标签大小写敏感,标签和属性都没有预定义,所以可以自行取标签名;XML的属性值需加引号,单、双都可,如果属性值中包含双引号,则使用单引号或实体引用,尽量不使用属性;XML注释:<!-- This原创 2021-04-04 20:45:02 · 2631 阅读 · 0 评论 -
Qt--信号分发(QSignalMapper)
一、适用场景Qt在编程过程中,难免有时候会批量的创建相同的控件,例如创建10个按钮,常规写法如下:QPushButton* Btn;QVector<QPushButton*> Btn_Vec;for(int i=0; i<10; i++){ Btn = new QPushButton(QString("%1").arg(i)); Btn_Vec.push_back(Btn);}connect(Btn_Vec[0],SIGNAL(clicked()),this,SLOT(s原创 2021-03-24 15:37:16 · 1359 阅读 · 0 评论 -
Qt Creator使用技巧+Qt工程文件pro详解
一、Qt Creator使用技巧1.1、IDE常用快捷键汇总快捷键解释F1为光标所在的符号显示帮助文件的内容F4在头文件和源文件之间切换F2跟踪光标下的符号,若是变量,则跟踪到变量声明的地方;若是函数体或函数声明,可在两者之间切换Shift + F2在函数的声明(函数原型)和定义(函数实现)之间切换Ctrl + Shift + R对光标处的符号更改名称,这将替换到所有用到这个符号的地方Ctrl + /为选择的文字进行注释符号的切换,即可以注释原创 2021-03-02 13:31:48 · 1976 阅读 · 2 评论