Qt
robert_cysy
这个作者很懒,什么都没留下…
展开
-
26-Qt在有多个屏幕的电脑上,在一个屏幕中居中显示软件窗口
参考以下代码即可实现软件在多屏幕电脑的其中一个屏幕的中间显示。支持跨平台。 MainWindow w; //获取当前软件所在屏幕的序号 int currentScreenIndex = a.desktop()->screenNumber(&w); //这个获取指定屏幕获取其屏幕分辨率的方法 警告deprecated //QR...原创 2020-04-05 18:49:29 · 1300 阅读 · 0 评论 -
25-Qt使用定时器快速刷新QLabel导致CPU占用太高的解决方法
一、问题描述使用Qt开发中,遇到了实时更新“UI上的状态文字”的时候,CPU占用非常高的问题。且随着时间积累CPU占用达到了99.3%。并导致软件界面反应卡顿(卡死)的现象。二、原因分析跟踪并调试代码发现最终导致CPU占用非常高,居然是在最后的显示阶段照常的。本案例中,软件使用1秒刷新16次的定时器,刷新“状态文字”,如下代码所示(从实际代码总简化):void Init() { t...原创 2020-03-25 20:34:27 · 6960 阅读 · 0 评论 -
# 24-Qt Creater 设置文件编码为UTF-8(图文)
Qt Creater 设置文件编码为UTF-8设置步骤如下图所示:文件->偏好设置->文字编辑->表现->右侧编码设置。原创 2020-02-16 16:16:11 · 1122 阅读 · 0 评论 -
# 23-使用MVP架构编写Qt应用程序
一、简要概述MVP是由MVC发展而来,总体目的与作用相同。都是为了软件构架有层次之分,使得核心逻辑、界面控制、数据这三者分层清晰明了。减少了三者之间的逻辑耦合与功能耦合。也是的代码清晰易读。从而减少因写代码造成的bug。也增加了软件整体的稳定性。写大型一些的软件一般都要按功能模块化。一个软件由多个独立模块组成,这样做的优点如下:模块功能相对独立便于多人协作开发。模块也可以在其他项目...原创 2020-01-07 22:23:41 · 3377 阅读 · 3 评论 -
# 22-QThread的用法
一、继承QThread实现多线程#ifndef WORKER_H#define WORKER_H#include <QThread>#include <QDebug>class Worker : public QThread{ Q_OBJECTpublic: Worker();signals: void Finished(int...原创 2020-01-07 15:35:52 · 203 阅读 · 0 评论 -
# 21-Qt编译dll库的时候,“不允许 dllimport 静态数据成员的定义”
在使用一个继承自QObject带有Q_OBJECT宏的导出类时,编译报错:不允许 dllimport 静态数据成员 的定义。原因是自动生成的moc文件带有静态函数,无法导出。在Qt中的解决办法是 去掉 Q_DECL_IMPORT...原创 2020-01-07 11:18:42 · 4656 阅读 · 0 评论 -
20-Qt中数据通信与数据保存用到的强制类型转换(C++类型强制转换)
20-Qt中数据通信与数据保存用到的强制类型转换(C++类型强制转换)在软件开发中经常会用到一些类型转换,本文所列出的类型转换是在做一个项目中所使用到的所有类型转换。在项目中把这几个类型转换单独封装成了通用类。以下分别介绍。一、ByteUtil在电脑软件和硬件设备通信的开发中,经常用到这个类。在这类软件中需要把电脑软件代码所使用的数据类型转换为与硬件通信协议所规定的格式。(通信协议里面的格式...原创 2020-01-06 11:58:38 · 647 阅读 · 0 评论 -
19-Qt界面开发所建议的“对话框基类”和“Widget基类”
在pc软件页面开发中,使用最多的就是Dialog和Widget这两个基本窗体控件。这两个窗体控件分别有常用的函数。可以把这些常用函数放到一起形成一个基类。在软件页面开发中,提升出一个基类的好处:a. 避免函数和功能模块重复B. 可以对一些常用函数进行命名约束,使特定函数名称保持统一c. 使代码层次分明,简洁明了d. 修改基类功能可以让继承自这基类的所有子类都得到同样的功能。基类...原创 2020-01-04 16:09:24 · 381 阅读 · 0 评论 -
# 18-QT动态语言切换、历史语言记录、QMessageBox和QDialogButtonBox的Ok按钮动态切换汉字
一、效果二、原理动态翻译的原理a.使用Qt的的翻译规范写需要在软件中翻译的文字b.使用qt的翻译系统翻译软件并生成‘.qm’文件,并添加到资源c.使用以下代码在主函数或任意地方加载‘.qm’文件即可实现对软件中文字的动态翻译translator_zh_p = new QTranslator();translator_zh_p->load(":/tr/tr/app_zh_C...原创 2019-12-25 22:05:22 · 812 阅读 · 0 评论 -
17-Qt用代码使用QSplitter的方法(跟随窗口缩放)
一、效果图二、实现方法直接贴代码如下:按照如下代码步骤即可正确使用QSplitter,注意和说明事项在代码中附注了。 centralwidget = new QWidget(MainWindow);//新建要放置splitter的widget centralwidget->setObjectName(QString::fromUtf8("central...原创 2019-11-30 11:37:46 · 1551 阅读 · 0 评论 -
16-Qt右键弹出菜单使用示例-支持多级子菜单(QTreeWidget和QListWidget和QWidget)
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...原创 2019-11-29 11:05:55 · 2782 阅读 · 2 评论 -
15-Qt制作视频播放控件(视频原始比例)窗口大小可自由缩放
一、效果二、实现原理继承QWidget并重载paintEvent,然后调用painter.drawPixmap函数实现绘制一帧视频或图像。注意:不要继承QLabel并直接调用成员函数setPixmap来实现视频帧显示。这个方法会造成软件界面卡顿。且cpu使用率到60%。且兼有内存泄漏的问题。不要继承QOpenGLWidget并重载paintEvent然后使用painter.drawP...原创 2019-10-28 19:13:48 · 6311 阅读 · 11 评论 -
14-Qt中为什么函数可以直接返回QString对象而不是QString*(指针),复制构造函数的作用
Qt中为什么函数可以直接返回QImage/QString对象,而不是QImage* QString*(指针)副标题:C++编程中使用List<Object*>还是List<Object>呢 ?注:本文涉及到的主要知识点为:C++的复制构造函数的作用一、在C++中返回参数的基础知识在C++中,函数返回类型有,基本数据类型,结构体,对象,指针。下面举例几个正确使用C++...原创 2019-10-21 10:37:43 · 5052 阅读 · 0 评论 -
13-Qt使用Ps制作软件启动图标和应用内图标的一般方法于步骤
13-Qt使用Ps制作软件启动图标和应用内图标的一般方法于步骤一、本文目标本文所指的图标包括应用软件的“启动图标”和“应用内图标”。本文虽然分类到qt分类,但是本文介绍的方法适用于所有系统及各个软件平台。二、图标制作相关背景知识常用图片格式及其特点图片格式有很多,哪个格式更适用于软件图标和应用内图片呢?首先了解各种格式的特点:png:无损压缩,压缩比例大,支持具有透明通道的...原创 2019-10-14 22:08:58 · 1654 阅读 · 0 评论 -
01-为什么要用Qt开发(Qt跨平台应用开发)
一、为什么选择qt跨平台,一次写代码多个平台编译。使跨平台应用达到各个平台原生应用的体验与流畅度。相比与java或c#在开发图形计算方面的软件时有非常好的使用体验与流畅度。 使用C++编程虽然没有java写起来快速省心,但是也没有差多少。但是软件执行效率非常高。 非常适用于图像处理 方面的软件(图像处理与计算方面对速度要求很高)。同时C++有大量的图像视频等处理库和C++版本的图像处理算法...原创 2019-06-09 14:53:49 · 13668 阅读 · 3 评论 -
04-Qt软件加入Log文件输出与终端彩色打印(包含行号)
Qt软件加入Log文件输出与终端彩色打印(包含行号)一、目的与需要在开发qt应用程序中,经常使用打印调试软件。qt自己的qDebug()就满足了需求。但是当需要把一部分log记录到文件的时候qt就没有提供了。这个时候可以使用qDebug()的qInstallMsgHandler来指定打印回掉函数了。在回掉打开文件进行写文件操作。这样简单实现,简单用。但是对于对log写文件要求比较高的比较成熟的...原创 2019-06-26 18:41:08 · 1076 阅读 · 0 评论 -
05-在MacOS系统下打包Qt应用程序为dmg(包含第三方动态库)
一、使用环境:Qt 5.12.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by Clang 10.0.0 (clang-1000.11.45.5) (Apple)) on “cocoa”OS: macOS Mojave (10.14) darwin version 18.6.0二、在MacOS发布dmg安装包在m...原创 2019-06-28 11:28:39 · 4522 阅读 · 2 评论 -
03-Qt应用程序关闭程序的时候出现QMutex: destroying locked mutex
一、QMutex的源码的析构函数源码如下QMutex::~QMutex(){ QMutexData *d = d_ptr.load(); if (isRecursive()) delete static_cast<QRecursiveMutexPrivate *>(d); } else if (d) # ifndef QT_LINUX_FUTEX if (d !=...原创 2019-06-29 19:07:24 · 6981 阅读 · 4 评论 -
06-Qt实现截取屏幕任意区域并保存为图片或视频(截屏控件)
一、效果图二、窗口特点与用途窗口背景透明,窗口中的控件并不透明。可以使用鼠标拖动窗口位置;可以通过拖放角任意改变窗口大小;可以正常放置任何控件或留空;此透明窗口用于实现截图功能或截取视频的功能;点击例子中透明窗口里的按钮即可保存透明选取的截图到执行文件目录;三、制作原理与方法使用以下代码实现窗口透明且窗口内控件不透明setWindowFlags(Qt::Dialog | ...原创 2019-07-06 09:41:20 · 5553 阅读 · 8 评论 -
07-Qt用代码实现对话框的自适应动态布局(布局跟随窗口大小改变)
一、效果图二、制作原理说明要想实现对话框缩放时候内部的控件跟着动态缩放。需要以下几个关键设置:给对话框窗口设置一个布局,以后窗口靠这个布局管理给对话框窗口设置QSizePolicy为Expanding窗口内包含的控件都设置QSizePolicy::Expanding属性,或自定义控件覆盖resizeEvent来保持自定义控件动态填满父布局。layout不用设置Expanding属性。...原创 2019-07-12 14:01:35 · 5206 阅读 · 0 评论 -
08-Qt结合FFmpeg导出/导入mp4或avi或mov(qt使用FFmpeg的步骤)
一、本例实现的功能与使用场景本例实现了把内存中的rgb数组图像导出为标准的mp4文件,以及把标准的mp4视频文件解码并导入到内存中。从而获取到RAW视频,方便对视频做图像处理。用qt做一个视频剪辑软件。剪辑之前需要导入标准的视频文件到内存,以及剪辑好的视频需要导出为标准的mp4文件。用qt做一个图像或视频处理类的软件,需要导出为标准的mp4文件。(本例子就是在这个需求下写的)二、使用环...原创 2019-07-30 17:13:39 · 2820 阅读 · 0 评论 -
09-用Qt开发KCP通讯测试工具(KCP测试工具)
一、KCP简介KCP通信是一种利在udp通信的基础上实现的一套模拟Tcp通信的协议。KCP是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果二、开发基础与环境本例子是在skywind3000/kcp的基础上作了一个图形测试工具。skywind3000/kcp的源码在如下链接:https://github.co...原创 2019-08-06 10:26:51 · 1891 阅读 · 0 评论 -
10-QT下实现画布自适应显示、缩放(以鼠标位置为中心进行缩放)、拖动、以及重置
零、效果图一、原理说明:实现在光标位置缩放画布的效果可以理解为,光标所对应到画布上的坐标点在缩放之前和之后都继续对应在光标所在的位置。而一般缩放画布,画布会以画布的左上角为固定点缩放,即画布大小变化后,左上角的位置不会发生变化。因此光标对应画布上的点在缩放后并不在原来的位置,而是发生了位移。因此把这个位移倒着移动回去,就实现了在光标位置点缩放画布的效果了。在任何系统平台上都可以按照这个原理实...原创 2019-09-20 14:45:54 · 9283 阅读 · 14 评论 -
11-Qt使用painter绘制只有2个圆角的矩形框并居中显示字符串(矩形自适应字符串长度)
Drawing Rectangle with only 2 corners rounded一、效果二、实现原理使用QPainterPath合并addRoundedRect和addRect的path形成目标path。然后使用painter填充绘制path即可。三、实现代码自定义类继承QWidget并实现如下方法:void paintEvent(QPaintEvent *event) o...原创 2019-09-25 10:40:40 · 1404 阅读 · 0 评论 -
12-Qt中使用QPainter绘制可以旋转角度的矩形
一、效果图二、原理因为QPainter只能绘制水平的矩形,而现在想要绘制旋转来一定角度的矩形,就需要使用QPainter的旋转功能了。使用到的函数分别如下:painter.translate(x1, y1);//把参数(x1, y1)指定的点移动到绘图区的左上角(绘图原点),使得目标绘制坐标成为坐标系的原点(0,0)painter.rotate(angle); //以坐标原点为中...原创 2019-10-08 14:35:17 · 7270 阅读 · 1 评论 -
02-跨平台的Qt程序崩溃之前生成Dump文件Breakpad
Qt跨平台开发之崩溃捕捉并记录崩溃详情Breakpad一、崩溃捕捉记录的意义二、在Qt开发中怎样实现崩溃捕捉记录呢?三、Google breakpad简单介绍四、Google breakpad实现原理简单了解五、在Qt工程中集成Breakpad实现跨平台异常捕获六、qBreakpad的编译方法七、各平台下的例子工程下载地址一、崩溃捕捉记录的意义应用程序发布出去之后用户使用的过程中出现崩溃的情况...原创 2019-06-14 09:16:45 · 5969 阅读 · 7 评论