- 博客(632)
- 资源 (173)
- 收藏
- 关注
原创 Qt优秀开源项目之十八:QtService
QtService是一个用于实现Windows服务或unix守护进程的开源项目源码可以编译成动态库,也可以直接在项目中引用源码源码目录qtservice/examples中包含了三个例子,值得参考。
2023-04-20 22:07:01
2063
1
原创 Qt基础之三十五:Qt中文乱码探索
Qt中文乱码看这一篇就够了先说个小技巧:Qt Creator支持显示源文件编码格式右上角点UTF-8,会弹出“文件编码”对话框我的开发环境是Win10 Qt5.12.6 VS2017,IDE是Qt Creator。
2023-04-07 00:13:12
697
原创 Qt之设置子菜单的弹出延时
但是真*360安全卫士的托盘菜单却无此问题,而且它的子菜单弹出非常快,几乎无延迟。这就涉及到Qt的事件循环机制了,子菜单实际上是一个popup弹窗,自带事件循环,如果按钮的hover状态被取消前,事件循环就进入到子菜单中,就会出现上述问题。Qt中主菜单中的子菜单并不是立即弹出的,在windows上默认会延时256毫秒再弹出。这样一般情况下不会有问题,但是在定制菜单时可能会出现鼠标移动过快导致按钮hover状态无法自动取消的问题。这里先给出结论:将子菜单的延时设为0后,上述问题解决。
2023-04-02 15:45:28
684
原创 PS(PhotoShop)调整图片角度
最简单的就是操作菜单:图像->图像旋转->任意角度但是这样并不能一次旋转到位,更专业的做法是先用“标尺工具”在图片上画一条线,这条线与水平方向的夹角就是想要旋转的角度。我这里画的线与马的眼睛平行,这样旋转后马就是正的了。然后操作菜单:图像->图像旋转->任意角度,此时弹窗中的角度就不需要自己输入了,直接点确定即可。
2023-03-25 22:46:49
1244
1
原创 Qt之实现类似软件安装时的新功能介绍界面
在软件安装时,一般会轮播软件的新功能,安装后,如果还想查看这些新功能该怎么办呢,我们可以把这个介绍新新功能的小应用集成到软件的“帮助”菜单中,比起纯黑文字的无趣介绍,图文方式的呈现会生动得多。最近在看《赘婿》,借几张图过来用用。
2023-03-24 13:33:36
825
原创 Qt优秀开源项目之十七:QtPromise
QtPromise是规范的Qt/C++实现。该规范的译文见附录。QtPromise基于Qt5.6及以上版本,当然也包括Qt6。,每个API都提供了demo。Promise是一种异步编程的解决方案,可以替代传统的解决方案——回调函数和事件。Promise的三个特点:☆对象的状态不受外界影响。☆一旦状态改变了就不会在变,也就是说任何时候Promise都只有一种状态。☆以同步的方式调用异步,通过返回新的promise来实现then链式调用。
2023-03-21 20:37:01
2564
2
原创 Qt基础之三十三:海量网络数据实时显示
开发中我们可能会遇到接收的网络数据来不及显示的问题。最基础的做法是限制UI中加载的数据行数,这样一来可以防止内存一直涨,二来数据刷新非常快,加载再多也来不及看。此时UI能看到数据当前处理到什么阶段就行,实时性更加重要,要做数据分析的话还得查看日志文件。这里给出UDP+QListView和TCP+QPlainTexEdit两种实现方案。
2023-03-19 11:34:11
1796
2
原创 Qt基础之三十二:浅谈qDebug()
我们先来看看qDebug()的基本用法,再去研究qDebug的实现原理。除了qDebug(),Qt还提供了qInfo()、qWarning()、qCritical()方便我们打印不同种类的信息,而qFatal()直接结束程序,后面代码不再执行,用的较少。在Unix/X11和macOS,调试信息会打印到stderr;在Windows,如果是控制台程序,调试信息会输出到控制台,否则会输出到调试器(debugger)—比如说Qt Creator的应用程序输出(Application Output)窗口。
2023-03-18 09:56:48
1574
原创 Qt之调用内置的压缩/解压工具
之前在Qt中直接调用过zlib,详见:Qt之调用zlib压缩与解压缩功能没想到Qt还有内置的压缩/解压工具:QZipWriter和QZipReader
2023-03-17 12:19:21
730
原创 Qt基础之三十一:Qt网络编程(TCP&UDP)
Qt网络模块(Network)提供了编写TCP/IP客户端和服务器的类。该模块不仅提供了低级(low-level)类,如QTcpSocket、QTcpServer和QUdpSocket,还提供了高级(hight-level)类,如QNetworkRequest、QNetworkReply和QNetworkAccessManager。
2023-03-14 22:21:04
1122
原创 Qt之高仿QQ系统设置界面
QQ或360安全卫士的设置界面都是非常有特点的,所有的配置项都在一个垂直的ScrollArea中,但是又能通过左侧的导航栏点击定位。这样做的好处是既方便查看指定配置项,又方便查看所有配置项。
2023-03-11 08:28:23
3099
2
原创 Qt中调用gtest进行单元测试及生成覆盖率报告
我下载的是1.12.1,这是最后一个支持C++11的版本。首先编译gtest,在windows上的编译方式和编译gRPC一模一样,详见,编译完了会生成几个静态库,如下图所示本文主要用到了libgtest.a下载,默认安装到C:\msys64,安装后修改安装目录下的etc/profile文件,在最后一行添加Qt所用的mingw版本,如下图所示否则在生成覆盖率报告的时候会出现如下提示信息,导致生成失败然后下载。
2023-03-05 14:28:59
1326
原创 Qt基础之三十:百万级任务并发处理
体现线程快的核心是延迟和吞吐量,延迟就是每个发送请求到收到响应所消耗的时间,延迟越短,程序越快,性能也越好。对于CPU密集型计算多线程本质上是提升CPU的使用率,所以对一个4核的CPU来说,理论上创建4个线程就可以了。我们都知道在进行I/O操作时,CPU是空闲状态,所以我们要最大化的利用CPU,不能让其是空闲状态。如图所示:CPU 在 A、B、C 三个线程之间切换,对于线程 A,当 CPU 从 B、C 切换回来时,线程 A 正好执行完 I/O 操作。CPU和I/O的耗时如果是1:1那开2个线程是合适的。
2023-02-28 23:03:17
753
1
原创 Qt基础之二十九:图形视图框架(Graphics View Framework)及其应用
无意中从网络获取一份俄罗斯方块源码,基于图形视图框架(Graphics View Framework)实现的。当然源码的核心从来都不是界面,而是方块的移动、变形和消除等算法。源码非常完整,注释详细,经改动后已能在Qt5中运行,下面是运行效果,背景音乐和音效也是有的。
2023-02-21 22:45:40
918
原创 Qt优秀开源项目之十六:SQLite数据库管理系统—SQLiteStudio
SQLiteStudio是一款开源、跨平台(Windows、Linux和MacOS)的SQLite数据库管理系统。当然我这里只是简单的测试了一下。SQLiteStuido的功能很强大,要熟练使用,还得多摸索才行。不想编译的话,可以去官网下载安装包,当前最新的版本是3.4.3,安装的时候居然可以选择简体中文。下图是数据库添加页面,选择刚才的test.db,"名称"会自动显示。通过菜单:数据库->添加数据库。通过工具栏:下图中的红圈所示。下图是数据表中的数据。
2023-02-12 12:04:07
1892
1
原创 Qt基础之二十六:Qt绘图系统(Paint System)
通过从QPaintDevice类派生并重新实现QPaintDevice:paintEngine()函数,即可添加一个新的绘图设备。在paintEngine中要告知QPainter应该使用哪种绘图引擎在该设备上绘制。要真正能够在自定义绘图设备上绘制,此绘图引擎必须是从QPaintEngine类派生的自定义绘图引擎。
2023-02-11 23:15:13
1087
原创 C++11实现的线程池:ThreadPool
github地址:https://github.com/progschj/ThreadPool关于其使用,详见:C++11并发学习之六:线程池的实现
2023-02-04 14:24:07
275
原创 C++之监控文件是否被修改
软件开发过程中经常会用到配置文件,某些应用场景要求在软件运行时动态修改配置文件,此时就需要监控配置文件是否被修改,如果修改了,重新加载。这里config.txt和可执行文件同一目录,每次修改config.txt,就会打印File changed。
2023-02-04 14:11:22
990
3
原创 Qt基础之二十三:反射(Reflection)
不同于boost这样的模板库,Qt利用自带的Meta-Object Compiler(moc)来生成额外的C++代码,这些代码实现了Qt程序所必须的元数据对象,可以说Qt是基于C++的一种扩展。反射是指程序在运行时动态获取对象属性与方法的一种机制,即编译器需要将类型信息(属性类型与偏移地址以及成员函数的地址等信息)编译到程序文件中,当程序运行时将这些信息加载到内存中去,做到运行时只根据对象的地址或引用就可以获取到对象的类型信息,从而利用这些信息达到修改或重建对象的目标。☆在运行时调用对象的方法;
2023-01-25 13:26:33
4449
原创 Qt之基于Graphics View实现Mesh网络拓扑图
Mesh是一种多节点、无中心、自组织的无线多跳通信网络,也就是网状结构网络。网络中所有的节点都互相连接,每个节点拥有多条连接通道,所有的节点之间形成一个整体的网络。
2023-01-17 22:30:33
2114
23
原创 Qt之加载百度离线地图(WebKit和WebEngine)
发现存在很多问题,比如不加加载折线等图形覆盖物;只支持QtWebKit,不支持QtWebEngine。之前做项目需要在百度离线地图上绘制Mesh拓扑图,必须添加折线覆盖物,使用的是百度离线地图API V2.1,满足需求。除了添加或删除自定义覆盖物外,还支持添加自定义控件,打开或关闭信息提示窗口等等。
2023-01-14 15:20:55
2163
7
原创 Qt基础之二十一:QtRO(Qt Remote Object)实现进程间通信
这里将QtRO单独从上一篇拎出来,因为它是Qt5.9以后新加入的模块,专门用于进程间通信。其使用步骤有点类似之前介绍过的RPC(Remote Procedure Call)框架:gRPC和thrift,关于这两个框架详见和QtRO基于Socket封装,不仅支持RPC,还支持LPC(Local Process Communication),这两者都属于进程间通信。如果是用于RPC,使用QTcpSocket;如果用于LPC,则使用QLocalSocket。因为是Qt出品,能非常方便的集成到自己的Qt项目中。
2023-01-13 23:57:23
1150
2
原创 Qt基础之二十:进程间通信
进程间通信(IPC:Inter-Process Communication),就是在不同进程之间传播或交换信息。那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。但是,系统空间却是“公共场所”,所以内核显然可以提供这样的条件。除此以外,那就是双方都可以访问的外设了。在这个意义上,两个进程当然也可以通过磁盘上的普通文件交换信息,或者通过“注册表”或其它数据库中的某些表项和记录交换信息。
2023-01-08 14:59:03
1752
原创 Qt基础之十八:WebEngine与JavaScript交互
Qt从5.6开始就用Qt Webengine替换了Qt WebKit,据说加载速度较Qt WebKit更快。需在pro中添加QT += webenginewidgets。
2023-01-04 22:41:19
870
原创 Qt基础之十六:QtConcurrent和QThreadPool
QtCurrent模块能处理一些常见的并行计算:map、filter和reduce。它们返回一个QFuture对象,该对象可用于获取函数执行的结果。QFuture还可用于查询计算进度和暂停/恢复/取消计算。为了方便起见,QFutureWatcher可以通过信号和插槽与QFuture进行交互。QtCurrent的map、filter和reduce算法自动将计算分布到所有可用的处理器核上,因此,当QtCurrent在多核系统上更有优势。
2023-01-02 09:48:23
682
1
原创 Qt基础之十四:线程同步
虽然线程的目的是允许代码并行运行,但有时线程必须停止并等待其他线程。例如,如果两个线程试图同时写入同一个变量,则结果是未定义的。强制线程彼此等待的原则称为互斥。这是保护共享资源(如数据)的常用技术。Qt中的提供了多种线程同步方式,如下表所示Qt提供了同步相关的辅助类—QMutexLocker、QReadLocker和QWriteLocker,这样就可以更容易地使用QMutex和QReadWriteLock了。它们在构建资源时锁定资源,在销毁资源时自动解锁资源。
2022-12-31 14:26:35
719
原创 Qt中用thrift验证flume
flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。在flume中分为了3个组件,分别为source,channel和sink。Source是负责接收数据到Flume Agent的组件。Source组件可以处理各种类型、各种格式的日志数据。Sink不断地轮询Channel中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个Flume Agent。Channel是位于Source和Sink之间的缓冲区。
2022-12-31 09:25:45
708
2
原创 Qt中调用thrift
thrift是一个Apache公司开源的一款RPC(Remote Procedure Call)框架,让不同语言构建的服务可以做到远程调用无缝对接。Thrift库分两部分:libthrift - 核心库文件,需要依赖OpenSSL、boostlibthriftnb - 包含thrift非阻塞服务器, 需要libevent操作系统:windows 10这里因为项目需要,编译MinGW64版本的thrift。
2022-12-28 21:57:08
863
原创 Qt中调用gRPC
RPC是Remote Procedure Call的简称,中文叫远程过程调用。gRPC是由 google开发的一个高性能、通用的开源RPC框架,主要面向移动应用开发且基于HTTP/2协议标准而设计,同时支持大多数流行的编程语言。
2022-12-21 22:14:08
1772
1
原创 Qt基础之九:子线程和GUI交互
但回调函数不一定运行在主线程中,因此我们需要将数据封装成事件,然后用postEvent添加到事件列表,接着就可以在主线程重写的event方法中处理该事件了。Qt基础之五:使用invokeMethod异步调用函数 https://blog.csdn.net/caoshangpa/article/details/79420547。C++面试题之为什么不能多线程直接操作GUI状态 https://blog.csdn.net/caoshangpa/article/details/78557639。
2022-11-18 17:39:58
1281
原创 C++笔试题之n阶楼梯问题:每次只能走1阶或2阶,有多少种方法走完
n阶楼梯问题:每次只能走1阶或2阶,有多少种方法走完。方法一:采用递归的方式方法二:采用非递归的方式
2022-11-15 11:59:13
1685
原创 Qt基础之四:Qt信号与槽机制原理及优缺点
在GUI编程中,当我们改变一个控件,通常希望其他控件被通知到。更一般的,我们希望任意对象之间能够通信。例如,如果我们点击了“关闭”按钮,我们希望窗口的close()函数被调用。其他工具包使用回调来实现这种通信。回调函数是一个指向函数的指针,所以如果你想要一个处理函数通知你一些事件,你可以将一个指向另一个函数(回调函数)的指针传递给处理函数。处理函数然后在适当的时候调用回调函数。但回调可能不太直观,而且在确保回调参数的类型正确性方面可能会遇到问题。
2022-11-12 09:09:07
1484
原创 QSS编辑器QssEditor之三:Ribbon控件与换肤
Ribbon控件即Office样式UI,Ribbon控件有许多开源实现,例如:SARibbon功能强大,但以学习为目的的话,我们可以自己去实现一个简单的。基本思路是自定义QTabWidget,然后通过QSS调整样式。如上图所示,我们可以实现一个类QHRibbon,继承自QTabWidget,通过接口void addTab(const QString &tabName)和void removeTab(const QString &tabName)来动态添加和删除Tab页;
2022-11-07 15:41:58
850
2
原创 QSS编辑器QssEditor之二:加载有变量的QSS
Qt样式表可以让你自定义任何一个Qt控件的样式包括颜色、边框、背景等等(你想的到样式都可以),Qt样式表的概念、术语和语法与HTML的CSS样式表类似。样式表是文本规范。一般形式也可以使用QWidget::setStyleSheet()在特定小部件(及其子部件)上设置如果在不同级别上设置了多个样式表,Qt将从所有设置的样式表派生有效样式表。这称为级联。
2022-11-07 12:45:48
961
1
原创 QSS编辑器QssEditor之一:简介
本编辑器参考了以下两个开源QSS编辑器1.这个编辑器能正常使用,支持实时预览,UI上略显简陋。但是github上release的可执行版本是不支持语法提示和自动补全的,如果想要支持这个特性,需要自己下载源码,将编辑器引擎切换到QScintilla,然后重新编译2.这个编辑器是用PyQt开发的,UI布局上就好得多,但是bug多到没法用,说好的实时预览都没兑现。本编辑器的UI布局参考该编辑器。
2022-11-05 15:07:03
2795
3
20种数据结构和算法的C++实现
2017-11-17
Qt下用QSplitter实现滑动窗口
2017-11-16
QML实现图像处理,包括浮雕、锐化等效果
2017-11-14
WebRTC学习之四:最简单的语音聊天
2017-01-10
WebRTC学习之三:录音和播放
2016-12-26
QHVlcPlayer.rar
2021-02-27
Qt+libVLC+QWidget渲染
2021-02-27
Qt调用libVLC实现播放器
2021-02-26
TestUI.rar
2021-02-09
QHOpenGLPlayer.rar
2021-01-10
基于Qt和SDL2播放PCM
2021-01-05
Qt5版NeHe OpenGL教程6-10
2018-05-17
Qt5版Nehe OpenGL教程1-5
2018-05-14
Qt调用OpenGL API实现彩色旋转立方体
2018-05-09
MyTcpClient
2018-03-16
Boost.Asio C++ Network Programming随书源码
2018-01-29
Boost.Asio C++ Network Programming(高清,带书签,可复制)
2018-01-29
Effective Modern C++ 英文原版(带书签)
2018-01-27
++i和i++哪个更高效
2023-02-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人