![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Qt经验总结
文章平均质量分 90
宁静致远2021
天道酬勤,持之以恒。
发上等愿,结中等缘,享下等福;
择高处立,寻平处住,向宽处行。
展开
-
Linux:Ubuntu18.04下开机自启动QT图形化界面
如果这里启动失败了需要回头更改rc.local文件看看是不是有语法错误或者执行的脚本有没有问题。如果在里面运行了脚本记得给脚本也添加可执行权限(在脚本所在文件夹下打开终端)困扰了一天的时间,终于解决,好了,废话不多说,直接上干货。电脑重启后就会自动执行,跳出QT图形运行界面 ,成功!如果查看状态和我一样的话,就说明程序启动成功了。如果启动一切无误且状态正常的话使能开机自启动。原创 2024-07-06 08:51:09 · 574 阅读 · 0 评论 -
为RK3568或RK3288开发板创建交叉编译环境{采用amd64的ubuntu系统配置交叉编译arm64开发环境}(保姆级包括安装QT)超详细记录版
开发环境采用的是amd64 linux的系统,所以.run可以运行,我们在QT官网下载即可,版本自己选择即可,最好与后面要编译的qt对应起来。(9)这个hello.c建议放在/home/你的用户名/下面的文件夹内。(8)创建一个简单的c程序,用arm64编译器编译一下放到板子上运行。(1)将两个交叉编译器文件放在Downloads下面。(5)添加交叉编译器环境,路径在:/opt/都显示版本号说明没有问题。原创 2024-07-02 16:54:37 · 1038 阅读 · 0 评论 -
深入了解Qt 控件:Display Widgets部件(1) 以及 QT自定义控件(电池)
做一个电池控件,需要一个拖动条和一个进度条。不多说,直接上代码.h文件Q_OBJECTpublic:~Widget();private:.cpp文件//将拖动条设置为横向//设置拖动条范围//设置样式//拖动条每次值改变都会执行if(m_batteryBar->value()原创 2024-06-29 10:40:03 · 333 阅读 · 0 评论 -
Qt QQueue 详解:从底层原理到高级用法
在现代软件开发中,数据结构和算法扮演着至关重要的角色。它们为程序员提供了处理各种不同场景下数据的有效方法。QQueue(队列)是一种常见且实用的数据结构,它在许多应用中都发挥着关键作用。本文将简要介绍QQueue的重要性和简介。队列(Queue)是一种遵循先进先出(FIFO,First In First Out)原则的线性数据结构。在这种结构中,元素的添加(入队)和移除(出队)操作分别在队列的尾部和头部进行。这种特性使得队列在处理一些需要按顺序执行任务的场景中表现出优越性。原创 2024-06-09 22:31:01 · 682 阅读 · 0 评论 -
QT中为程序加入超级管理员权限
QT的一些文件操作,注册表的操作等,有些操作会无效,主要是因为没有对C盘的相关权限。通过为程序加入超级管理员权限可以解决此问题。第一行是为程序添加图标,第二行是增加超级管理员权限。原创 2024-06-08 08:35:14 · 643 阅读 · 0 评论 -
QT语言国际化 动态修改
2、对于需要翻译的文本,需要使用QObject::tr(“1111”).或QApplication::translate(“Widget”, “\346\227\213”, 0)包含,这要Qt的语言家功能才会将需要翻译的文本找到保存到ts文件中。5、生成的qm文件是在项目文件家中,而不是exe文件所在文件夹。4、工程的菜单: 工具 -> 外部 -> 语言专家 ->更新翻译(lupdate) 生成ts文件。6、工程的菜单: 工具 -> 外部 -> 语言专家 ->发布翻译(Release) 生成qm文件。原创 2024-06-03 09:32:00 · 479 阅读 · 0 评论 -
超详细基于Qt平台实现C/C++调用Matlab函数全流程
基于Qt平台实现C/C++调用Matlab函数有三种方式:(1)将Matlab函数封装成.dll文件,再在Qt平台上调用.dll文件实现;(2)将Matlab函数导出成.exe可执行程序,再在Qt平台上调用.exe可执行程序;(3)直接在Qt平台上调用Matlab Engin引擎,这种方法需要计算机上安装有Matlab软件。本文是通过第一种方式,将MATLAB代码转成C/C++代码和相关动态链接库进行实现的,其他两种方式具体可以参考:Qt调用MATLAB引擎混合编程。原创 2024-06-03 08:58:52 · 1319 阅读 · 1 评论 -
【Qt底层之内存管理机制】Qt 对象 父子关系、运行时机制与高效编程技巧
也就是说,在析构父对象–w时,会自动调用子对象btn的析构函数。当父对象析构的时候,这个子对象列表中的所有对象都会被析构,当析构子对象的时候,会自动从父对象的子对象列表中删除。按照这种形式排列就会形成一个对象树的结构,最上层是父对象,下面是子对象,在再下面是孙子对象,以此类推。值得注意的是,如果在构造时设置父对象为 NULL,那么当前实例不会有父对象存在,Qt 也不会自动析构该实例,除非实例超出作用域导致析构函数被调用,或者用户在恰当时机使用 delete 操作符或者使用 deleteLater 方法。原创 2024-05-30 21:15:30 · 699 阅读 · 0 评论 -
Qt加载一个启动界面
用Qt编写界面,有时候看到一些软件启动前回进行各种算法和内容的加载,一般来说有加载文件和加载各种库以及启动其他的文件。在Qt里面我们用QSplashScreen类就可以实现上面的操作,当然启动时最好进行多线程的操作。不过如果是一个简单的例子我们就不用进行那么复杂的操作。原创 2024-05-08 16:16:01 · 693 阅读 · 0 评论 -
QString设置小数点精度位数
因为Qt又默认只保存前6位,所以数据就是123.457。所以对精度要求高的话,就不要直接1234567/10000.用除法。在Qt中,我们可以使用QString::number()函数将float类型转换为QString类型以便在界面上显示。该函数默认显示6位小数,但我们也可以通过设置第二个参数来控制小数点位数。QString使用toDoouble转化double类型,其实精度没有丢失,只是我们使用qDebug打印时出了问题。在上面的代码中,参数’f’表示将数值格式化为浮点数,2表示保留2位小数。原创 2023-12-31 17:25:42 · 1835 阅读 · 0 评论 -
Qt图形视图框架:QGraphicsItem详解
我们在使用QGraphicsView框架的时候,经常需要自定义QGraphicsItem,并且需要实现Item的平移、改变大小和旋转的效果。接下来介绍他们的一种实现方式。原创 2023-11-15 09:34:57 · 887 阅读 · 0 评论 -
Qt界面设计时使各控件依据窗口缩放进行自适应填充的方法——使用布局、Spacer等控件
关于 Qt 布局管理,有专门的帮助文档页面Layout Management。本章的主要内容就是介绍布局管理的知识,Qt 设计师里面不仅有布局器的控件可以拖动使用,还可以在窗体里面选择控件,然后点击设计师上面的工具按钮自动添加布局器。本节首先大致介绍一下 Qt 设计师里面关于布局器的操作界面。Qt 的窗口主要内容包括: 布局的样式 , 基于UI界面设置布局 , 基于API设置布局。Qt 窗口布局是指将多个子窗口按照某种排列方式将其全部展示到对应的父窗口中的一种处理方式。原创 2023-11-11 17:00:23 · 7637 阅读 · 0 评论 -
CMake教程--QT项目使用CMake
其中,BasicUsageEnvironment, groupsock, liveMedia, UsageEnvironment都是live555项目的子模块,mediaServer是集成所有子模块打包成为可执行文件的部分。调用环境变量: $ENV{NAME}这种做法会导致项目里即便改了一处代码,也会编译所有代码,导致编译时间较长,不能很好利用增量编译,再说C/C++本身编译就很慢。变量的引用方式是使用${},在IF中,不需要使用这种方式,直接使用变量名亦可。在工程build目录下执行。原创 2023-11-11 15:17:23 · 2091 阅读 · 0 评论 -
QRadioButton、QCheckBox样式表
如果启用了自动互斥,属于同一个父部件的单选框的行为就和属于一个互斥按钮组的一样。如果你需要为属于同一父部件的单选框设置多个互斥按钮组,把它们加入QButtonGroup中。就像QPushButton一样,单选框可以显示文本,以及可选的小图标。当然,也可以设置setExclusive(false)来关闭互斥,从而实现多选功能。上面,我们通过调用QButtonGroup的setExclusive(true)来设置按钮组中的单选框互斥。槽函数,用来判断当前点击的按钮,以及获取按钮组中各个按钮的选中状态。原创 2023-11-11 08:50:01 · 1758 阅读 · 0 评论 -
Qt中正确的设置窗体的背景图片的几种方式
2.做过Qt开发的朋友应该都知道,Qt的子窗体是会继承父窗体的属性的,这就证明了为什么父窗体的背景在子窗体中也会有,这个是对这个原因的一个非常合理的解释。那么问题来了,我们怎么才能做到子窗体不继承父窗体的背景呢?1.在QWidget中这种方法是不行的,如果你足够细心的话,你会发现使用同样的设置背景图片的方法,背景图片其实并没有发生真实改变,但是它的子窗体背景图片是会发生改变的。背景色设置和背景图片设置也是一样的道理,如果不想窗口中的部件颜色和主窗口一样,也是需要#MainWindow来设置限定范围。原创 2023-11-03 14:17:37 · 15409 阅读 · 0 评论 -
QT之多个界面相互切换 (stackedWidget控件)
QStackedWidget是一个堆栈窗口控件,使用QStackedLayout布局,可以填充一些小控件,但同一时间只有一个小控件可以显示。QStackedWidget类实现组件层叠,但它是一个组件,而不是一个容器。stackedWidget控件: 可以自由在多个widget切换,可以通过点击顶部菜单,显示不同界面,在实际开发中应用很广泛。- 将一个组件添加到容器的末尾,返回添加组件的索引;- 将组件添加到指定的容器位置,返回添加组件的索引;- 将索引为index的组件设为可见,是个槽函数。原创 2023-11-03 13:46:49 · 3217 阅读 · 0 评论 -
基于Qt 的可视化图片处理程序——图片的加载与保存
在 Qt 中,我们一种最常用的图片加载方式就是使用 QImage 库,此处我们通过 QImage 加载图片,之后通过加载到 QPixmap 中,最终显示在 Label 上。在保存图片之前,我们需要先提取要进行保存的目标图片,通过一种类似于截屏的方式 pixmap()->toImage() 对图片进行提取,然后缩放到原来的大小,最后进行保存。首先要确定,使用 Qt 中 QFileDialog 库中的 getLoadFile 进行选择文件。原创 2023-11-03 11:48:23 · 3068 阅读 · 0 评论 -
Qt控件 UI设计 QPushbutton、QToolButton、QMenu
1.信号和槽:qt的这个功能基本就是对c++回调函数的封装,使用起来比回调函数更方便,但是牺牲一些性能,会更慢一点。connect的参数我是这么理解的:谁,发出什么信号,想让谁,实现什么功能。2.区别:toolbutton更特殊一点,可以配置快捷键触发槽,一般只用图片做按钮配置放在toolbar内,就像下图编辑界面的功能选项,用toolbutton就很简单。new一个pushbutton,new一个QMenu,new几个QAction,将action的对象加入menu的对象,原创 2023-11-03 09:03:18 · 625 阅读 · 0 评论 -
QSS 自定义QLineEdit
原文链接:https://blog.csdn.net/Staranywhere/article/details/107306276本文将通过简单示例介绍QLineEdit样式如何自定义。QLineEdit通用属性如下:borderborder-radiusmarginpaddingbackgroundcolorfontborder-imageQLineEdit特有属性如下:lineedit-password-characterThe QLineEdit password character原创 2023-10-28 10:15:49 · 386 阅读 · 0 评论 -
QPushButton样式设置
设置所有边框为2个像素,样式为实线,颜色为黑色。设置上边框为2个像素,样式为实线,颜色为黑色。设置左上角圆角为:10px。设置圆角都为:10px。原创 2023-10-28 08:59:09 · 3856 阅读 · 0 评论 -
QWidget|QFrame设置背景透明且可以带有边框颜色
之前在项目中有个需求:视频播放窗口电子放大功能,需要在播放视频的QWidget上绘制一个可以拖拽的矩形框,但是单独的drawRect并不能获得焦点去拖拽。QWidget覆盖到该窗口上,将其背景设置为透明即可,但是设置透明之后,其底色的黑色无法消除,经多方CSDN博主的成果于一身,搞定了该需求。效果: 窗口整体透明,但窗口控件不透明,QLabel控件只是字显示,控件背景色透明;在该窗口绘制一个矩形框,为画刷填充一个任意的颜色,重点:将其透明度降为不为0的数值即可。同样在构造函数中,效果和第一种方法相同。原创 2023-10-27 19:53:23 · 2059 阅读 · 0 评论 -
Qt下实现支持多线程的单例模式
实现单例模式的代码很多。本文的单例模式实现代码是本人一直在工程项目中使用的,现拿出和大家交流分享。本文实现的单例模式,支持多线程,采用双重校验检索的方式,集成析构类,杜绝内存泄漏,稳定性好。使用C++/Qt的朋友们可以了解一下。不再废话,直接上代码。单例是一种软件设计模式,采用单例模式书写的类可以确保在一个工程中只有一个对象实例。再通俗点,就是一个类写好了之后,就不需要也无法再把这个类实例化了,因为写这个类的时候已经确保了有且仅有一个已经实例化的对象。这样不是很蠢么?原创 2023-10-27 15:20:38 · 864 阅读 · 2 评论 -
Qt重定向QDebug,Qt/C++开源作品39-日志输出增强版V2022
相对于第三方的日志库,在 Qt 中使用 QDebug 打印更便捷,有时候也需要对 QDebug 输出进行重定向,如写入文件等。返回的函数指针我们可以保存起来,需要输出到控制台时进行调用。原创 2023-10-26 08:13:06 · 841 阅读 · 0 评论 -
Qt中的单例模式
单例模式是一种创建型设计模式,用于确保类只有一个实例存在,并提供全局访问点以便于其他对象获取该实例。在单例模式中,类只能实例化一次,并提供了一个静态方法或全局访问点来获取该实例。这样可以确保在整个应用程序中只有一个实例存在,并且可以通过该实例进行操作和访问。单例模式的特点包括:单一实例:单例模式确保类只有一个实例存在。全局访问点:通过静态方法或全局访问点获取单例对象,可以在任何地方访问该对象。延迟初始化:单例对象通常在首次访问时才会被创建,实现了延迟初始化的效果。原创 2023-10-26 07:55:58 · 978 阅读 · 0 评论 -
Qt中的枚举变量,Q_ENUM,Q_FLAG以及Qt中自定义结构体、枚举型做信号参数传递
之前做一个比较大工程,核心数据里面有很多是枚举变量,需要频繁地使用枚举量到字符串和字符串到枚举量的操作,为了实现这些操作,我把每个枚举类型后面都附加了两个类似Enum_to_String()和String_to_Enum()的函数,程序显得很臃肿。这时候就非常羡慕C#或者java等兄弟语言,内核内置了枚举量和字符串转换的方法。原创 2023-10-25 08:40:38 · 1179 阅读 · 0 评论 -
生成二维码
QR码(全称为快速响应矩阵码;英语:Quick Response Code)是二维条码的一种,于1994年由日本DENSO WAVE公司发明。QR来自英文Quick Response的缩写,即快速反应,因为发明者希望QR码可以让其内容快速被解码。QR码使用四种标准化编码模式(数字,字母数字,字节(二进制)和汉字)来存储数据。QR码最常见于日本,为目前日本最流行的二维空间条码。QR码比较普通条码可以存储更多数据,也无需要像普通条码般在扫描时需要直线对准扫描仪。原创 2023-10-22 17:02:00 · 1159 阅读 · 5 评论 -
Qt判断文件夹路径、文件是否存在不存在则创建
1.用QFileInfo::isFile()方法。原创 2023-10-22 12:47:11 · 3502 阅读 · 1 评论 -
QT判断平台和生成版本设置输入目录
【代码】QT判断平台和生成版本设置输入目录。原创 2023-10-22 11:31:07 · 615 阅读 · 0 评论 -
QT使用MSVC编译时报错C2001: 常量中有换行符
2、使用中文字符常量时,用QStringLiteral修饰中文字符,格式如QStringLiteral(“中文字符”),这种方法必须在每次使用中文字符时都需要进行修饰,否则还是会出现错误,所以比较麻烦。1、将字符中的中文字符用英文字母或单词代替,这样解决的好处是代码规范,语言统一,缺点就是没有中文表达那样直接、清晰。在新电脑做一个简单的Qt项目时,在debug输出的时候,出现了C2001错误,提示“常量中有换行符”,却可以顺利通过编译,试了很久改了编码也不行,即便编译通过界面显示却会乱码。原创 2023-10-20 15:52:52 · 1610 阅读 · 1 评论 -
Qt开发之路--模块化设计.pri文件
对于QT项目,默认情况下所有的文件都是在同一个文件夹下进行开发的,当做一个项目规模相对较大的时候文件很多导致维护及其困难,所以pri对文件进行模块化开发至关重要,pri进行模块化无非就是将相同业务逻辑的代码放到同一个文件夹下进行管理。第三步:在新建的文件夹下新建 " .pri " 文件,新建.pri文件名称规则(文件夹名称+.pri),新建.pri文件后,手动添加内容,或者根据第五步添加。如果一个大点的项目,含有多个*.pro文件呢,这些pro需要有些共同的设置或需要的文件,这时就很有必要了。原创 2023-10-17 14:59:06 · 2413 阅读 · 0 评论 -
Qt项目通过.pri文件将众多文件按功能模块分类显示,开发大型项目必备
一般我们创建Qt项目工程的时候,都是直接把所有的项目,头文件和资源文件等全放入pro中,这样一来小的项目(只有少数几个文件)那种,你可能就会觉得没有什么,但是在一些中大型的开发项目当中,可能会有十几个,甚至几十个文件的开发项目中,我们看树形结构的文件时,就会感到很杂乱,pri文件的作用就尤为重要了。简单来说,pri文件就是把pro文件中的一部分放到pri文件中进行一个管理,类似头文件,进行分块管理,分担pro文件的一部分压力,这样一来pro文件看起来就不会显得很臃肿。创建pri文件的步骤。原创 2023-10-13 11:22:38 · 1128 阅读 · 0 评论 -
彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)
Local字符集是什么?再把qcom\的所有cpp和h文件都用工具转换成UTF-8+BOM编码,请注意,如果文件转换成UTF-8(无BOM),编译仍会失败.main()函数使用QTextCodec::setCodecForTr(QTextCodec::codecForName(“GBK”));这里只列举大家最常用的3个编译器(微软VC++的cl编译器,Mingw中的g++,Linux下的g++),源代码分别采用GBK和无BOM的UTF-8以及有BOM的UTF-8这3种编码进行保存,发生的现象如下表所示。原创 2023-10-13 10:23:34 · 20575 阅读 · 2 评论 -
QSS样式表的使用
1、先谈谈我们设置样式有几种方法(a)、最简单,也是最直接——在Qt Designer 中添加样式我们在编辑框中添加需要的样式即可,然后点击确定我们就可以看到设置的效果了,这里我们只对QPushButton设置了样式,那我们是不是对界面上每个控件都要单独设置样式呢?当然不需要,我们可以对整个界面设置样式,然后将所有控件的样式都写在其中就可以了。Qt的样式表编辑工具可以帮助我们检验样式是否编写正确。原创 2023-10-12 09:08:40 · 450 阅读 · 0 评论 -
QT自制软键盘 最完美、最简单、跟自带虚拟键盘一样
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。原创 2023-10-09 14:51:34 · 1381 阅读 · 0 评论 -
QT通过TCP协议发送结构体数据
做上位机的时候下发数据,数据是一个结构体,这里就阐述一下怎么通过TCP协议发送结构体。我自己写的时候主要通过两种方式,一种是memcpy,另一种是用QDataStream。int age=1;}edwinwzy;这篇博客主要针对TCP发送结构体数据遇到的问题进行了归纳,发单个以及发部分情况都可以实现。原创 2023-10-09 10:01:35 · 412 阅读 · 0 评论 -
QObject::No such slot 接收者::槽函数名(参数)或QObject::connect: No such signal 发送者::信号名(参数)
正确格式:connect(form,SIGNAL(sendListGot(const QString)),this,SLOT(getListGot(const QString)));错误格式:connect(form,SIGNAL(sendListGot(const QString str)),this,SLOT(getListGot(const QString str)));原创 2023-10-05 13:33:12 · 634 阅读 · 0 评论 -
QT、c/c++通过宏自动判断平台
注意: 条件没有使能的编译内容,编译器不会对该内容进行错误检查。为了更好的进行跨平台移植、编译、调试。QT 工程.pro内的宏自定义判断平台。附注QT .pro自动判断平台。原创 2023-10-05 12:43:50 · 548 阅读 · 0 评论 -
使用libmodbus库开发modbusTcp从站(支持多个主站连接)
【代码】使用libmodbus库开发modbusTcp从站(支持多个主站连接)原创 2023-10-05 10:09:55 · 1966 阅读 · 0 评论 -
Qt多线程问题分析及解决思路QObject: Cannot create children for a parent that is in a different thread
在新线程中,生成了新的一份实体,其中跟父线程完全无关的部分成员,会在生成并且运行在子线程中,跟父线程有直接关联的部分,实际调用的还是在主线程中运行,一些成员变量则会保持同步。因为构造函数是在主线程中运行的,这个QSerialPort必然也是在主线程中生成的,所以必然在主线程中处理。没有放弃,继续测试,在Serial_Thread中,其它的槽函数中另外new多个QSerialPort出来,发现只要不把这个QSerialPort的指针赋给serial_port,就不会出现前面的错误提示。原创 2023-10-03 10:55:45 · 1518 阅读 · 0 评论 -
Qt多线程实现方式-moveToThread及其注意事项
2、内存泄漏,线程做完时,需要调用quit方法、wait方法,还要delete Worker对象和QThread对象。一种是使用容器(如:QVector类、QList类)去装入多个Worker对象和多个QThread对象,使用[](类似数组的操作),即可访问单个对象。1、使用线程时,能编译通过但是提示段错误,原因是没有在构造函数内new Worker对象和QThread对象。该方法已经落伍了,主要原因线程不安全,需要自己手动加锁,比较麻烦,所以推荐使用方法二。另一种是使用并发类QtConcurrent。原创 2023-10-02 09:12:48 · 2053 阅读 · 0 评论