- 博客(720)
- 资源 (173)
- 收藏
- 关注
原创 Qt高分屏自适应
Windows 上的桌面应用程序可以在不同的 DPI 感知模式下运行。这些模式可实现不同的 DPI 缩放行为,并且可以使用不同的坐标空间。有关 DPI 感知的详细信息,请参阅。请务必显式为进程设置默认 DPI 感知模式,以避免意外行为。有两个清单设置可用于指定进程默认 DPI 感知模式:<dpiAwareness> 和 <dpiAware>。<dpiAware> 已在 Windows Vista 中引入,仅允许将进程默认设置设置为系统感知。
2025-03-22 22:48:21
495
1
原创 Qt基础之四十九:Qt属性系统(Property System)
属性使用的自定义类型需要使用Q_DECLARE_METATYPE()宏进行注册,以便将其值存储在QVariant对象中。这使得它们既适用于在类定义中使用Q_PROPERTY()宏声明的静态属性,也适用于在运行时创建的动态属性。
2025-02-24 23:30:34
264
1
原创 QListView实现文件选择功能
QList实现的文件选择功能很常用,但是最高效的做法是先让左侧的源列表默认排序,然后再进行文件选择,这样在选择操作后,无论是源列表还是目标列表,都能很容易保证原来的顺序。
2025-02-23 21:14:19
241
原创 QTreeView添加网格线
网格线虽然可以用样式表添加,但效果不好。这里重写QTreeView的drawRow函数来实现网格线的绘制需要注意的是,当我们对QTableView/QTreeView/QTableWidget/QTreeWidget某行选中后,会发现某些单元格设置的前景色被覆盖了,比如设置的红色,一旦选中就变成了白色(如下图所示)。这肯定不是我们想要的,需要用自定义委托将其去掉。
2025-02-13 22:52:09
386
1
原创 QTreeView和QTableView单元格添加超链接
QTreeView和QTableView单元格添加超链接的方法类似,本文仅以QTreeView为例。在QTableView仿Excel表头排序和筛选中已经实现了超链接的添加,但是需要借助delegate,这里介绍一种更简单的方式,无需借助delegate。二.实现QHTreeView.hQHTreeView.cppMainWIndow.cpp在QHTreeView中通过带下划线的文本来模拟超链接,当鼠标悬浮在带下划线的文本上时,鼠标指针变为小手形状,在鼠标点击时触发超链接。这种方法的缺点
2025-02-09 22:35:08
350
1
原创 QTableView冻结多列
要实现列冻结,也就是说在拖动水平滚动条的时候,第一列永远显示在窗口上。怎么做到这个效果呢?这个例子给的解决办法很简单,我们只需要把两个视图叠加在一起,上层这个视图只显示第一列,下层的视图是全显示,然后拖动时候我们只需要正常拖动下层视图,上层视图联动即可。可用通过tableView->setFreezeColumns(2);设置要冻结的列数,谁然只是多冻结了几列,还是有许多工作要做的,千万不要对产品的需求轻易说Yes。下面稍作修改,让其支持冻结多列。
2025-02-09 11:29:30
501
原创 Qt之设置QToolBar上的按钮样式
通常给QAction设置icon后,菜单栏的菜单项和工具栏(QToolBar)上对应的按钮会同时显示该icon。这里使用ToolButtonTextUnderIcon,效果如下所示:工具栏按钮会自适应文本宽度,这样会导致两个按钮不一样大,那么如何将按钮设置成一样大呢,并自定义悬浮和点击的背景色?
2025-02-07 23:07:37
695
2
原创 C++笔试题之实现一个定时器
C++面试题之实现一个定时器。1.执行定时任务的时,主线程不阻塞,所以timer必须至少持有一个线程用于执行定时任务2.考虑到timer线程资源的合理利用,一个timer需要能够管理多个定时任务,所以timer要支持增删任务,通过容器储存任务3.当timer空闲时(即没有任务或执行任务的时刻未到),timer中的线程不应该空转来占用资源,可通过条件变量实现4.支持重复任务和非重复任务
2024-11-03 15:16:57
1764
1
原创 Qt优秀开源项目之二十四:EXCEL读写利器QXlsx
QXlsx既可以编译成库,也可以直接引用源码QXlsx-master\QXlsx\QXlsx.pri。QXlsx是基于Qt5/Qt6的Excel文件(*.xlsx)的读写库。此处省略N个例子............................5️⃣ 读所有sheet的数据。3️⃣ 添加sheet。4️⃣ 选择sheet。1️⃣ 读单元格数据。2️⃣ 写单元格数据。7️⃣ 单元格的颜色。
2024-10-19 10:58:36
2237
1
原创 ASIO网络调试助手之四:浅谈QTcpServer性能
网络上有些质疑Qt Network模块性能的声音,本文将从理论和压测两个方面对比ASIO tcp server和QTcpServer在Windows上的性能,最后给出结论。
2024-10-18 00:48:51
1042
原创 Effective C++笔记之二十四:stack overflow
溢出(Stack Overflow)是指程序运行过程中,栈空间被耗尽,导致无法继续分配栈内存的错误。C++程序中,栈用于存储函数调用的局部变量、返回地址、函数参数等。当栈空间耗尽时,会引发栈溢出,通常导致程序崩溃。如果用的是Visual Studio,报错弹窗如下图所示。如果用的是其他IDE,比如所Qt Creator,直接crash了,无任何提示。通常的现象就是调用了一个函数,然后就崩了,注释调这个函数,一切正常。
2024-10-11 00:01:39
2321
原创 Qt5.15.2静态编译 MinGW with static OpenSSL
Qt5.15.2静态编译 MinGW with static OpenSSL
2024-10-10 01:26:08
1408
原创 Qt基础之四十七:管理员权限
在Windows系统中,以管理员身份运行的意思是,用系统管理最高权限运行程序。一般来说,只有当某些操作涉及系统保护区域时,才会需要用户授权管理员运行。如此一来,程序、命令在运行过程中,就有了足够权限,更改系统设置或注册表。
2024-09-25 23:38:47
2202
原创 Qt优秀开源项目之二十三:QSimpleUpdater
QSimpleUpdater是开源的自动升级模块,用于检测、下载和安装更新。QSimpleUpdater目前Star不多(911个),但已在很多开源项目看到起身影,比如。
2024-09-17 22:08:12
2897
2
原创 Effective C++笔记之二十三:非void函数不写return
Qt Creator查看汇编的步骤如下上图是g++编译器下的汇编eax就是main()函数的返回值如果删掉return 0;可以发现编译器还是把eax的值设为了0,由此可见,即使在main函数中不写return 0,编译器还是会默认添加个return 0。eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 汇编语言中CPU上的通用寄存器的名称,是32位的寄存器。
2024-09-17 12:27:04
2059
原创 Effective C++笔记之二十二:C++临时变量的析构
这行语句结束时这个变量就被析构了,指针c_str()指向的内存也被回收,所以下面使用的c_str()指向的内存已经被释放了,所以无法输出我的博客网址。预期输出:https://blog.youkuaiyun.com/caoshangpa,但实际上无论是VC++还是g++编译器下,输出都是乱码。但是把字符串改短点,比如改成“优快云”,VC++编译器下输出为空,但在g++编译器下,是能正常输出的。因此这个问题非常隐蔽,不仅与编译器相关,还和临时变量的具体内容相关,一旦发生,很难定位。根据上面的分析,这些都是存在问题的。
2024-09-15 08:50:43
1308
原创 ASIO网络调试助手之三:ASIO网络编程注意事项
之前用过uv-cpp,和ASIO一样, 也支持异步机制,因此ASIO用起来还是比较顺手的,下面是个人总结的四点注意事项。
2024-09-14 22:35:53
1888
原创 ASIO网络调试助手之二:网络通信原理
网络调试助手是构建于网络套接字(Socket)组件之上的通信,而Socket本质上是对TCP/IP协议栈模型的封装。要熟练使用网络调试助手,就必须理解网络调试助手的通信原理,也就是要理解Socket以及TCP/IP协议的通信机制。
2024-09-08 22:18:31
2552
1
原创 C++之格式化日期时间为字符串(精确到毫秒)
C++11中提供了获取时间的chrono库,但是格式化显示太方便;C++11还提供了格式化时间iomanip库,通过其put_time方法可以格式化时间到秒,要显示毫秒,就需要自己处理了。
2024-09-08 19:59:12
1731
原创 ASIO网络调试助手之一:简介
多年前,写过几篇的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。开发环境:Win10支持协议:独立的Asio()只包含了头文件,不依赖Boost,使用时只需定义ASIO_STANDALONE,并将Asio的目录添加到编译系统的include path。Asio现在支持C++11/14/17/20,源码里提供了各个C++版本的examples。
2024-09-08 18:41:58
1207
原创 QTableView仿Excel表头排序和筛选
QTableview仿Excel表头排序和筛选:Excel功能非常强大。不仅支持内容排序和筛选,还支持颜色的排序和筛选,而且还支持设置多种过滤条件。本文只仿最常用的内容排序和内容单过滤条件的筛选
2024-07-14 19:14:42
1903
15
原创 Effective C++笔记之二十一:One Definition Rule(ODR)
其实这是C++普遍存在的问题,在.h里面定义了一个class或者template等东东,这个头文件被include到多个cpp里,在这些cpp里原样展开,编译器在链接的时候,就会看到多个重复的定义,于是C++规定了ODR(One Definition Rule),简而言之:"看到这种重复定义的类,且这些类的代码又长得一模一样,编译器就随便选一个用就行了"。结合前面的现象,在Release模式下,内联真正发生,函数在调用处展开,所以能得到正确结果,尽管如此,由于内联的非强制性,代码这样写依然是有隐患的。
2024-07-10 00:26:43
2430
3
原创 QTreeView第一列自适应
通过setStretchLastSection(bool stretch)可以设置最后一列自适应,对于QTreeView,stretch默认为true。但有时候我们需要设置第一列自适应,比如文件浏览器,共有名称、大小和修改日期三列,大小和日期的宽度几乎是固定的,但名称却可长可短,此时我们希望在窗口大小变化时,第一列的宽度能自动缩放,第二列和第三列的宽度保存不变,而且要支持鼠标拖动调整列宽。
2024-06-30 07:25:01
1590
2
原创 QListView、QTableView或QTreeView截取滚动区域(截长图)
QListView、QTableView或QTreeView截取滚动区域(截长图)本文以QTreeView为例,理论上继承自QAbstractScrollArea的类都支持本文所述的方法。
2024-06-23 17:59:03
1309
1
原创 QTreeView双击任意列展开
重点是如何通过其他列的QModelIndex(假设为index),获取第一列的QModelIndex(假设为firstColumnIndex)。这里要注意index函数的第三个参数,第三个参数为父index,因为通过在tree中仅通过row和column无法确定目标index。下面是一个只有一列的tree,注释中为每行的row和column此时,model->index(0, 0);只会定位到node0,而不是node1-0、 node2-0或node2-1-0。
2024-06-23 14:52:46
1427
原创 Qt基础之四十六:Qt界面中嵌入第三方程序的一点心得
本文主要讲解QWidget和QWindow的区别,以及如何在QWidget中嵌入第三方程序,并完美解决在QWidget中嵌入某些程序(比如Qt程序)时出现的白边问题。
2024-04-21 18:54:25
5827
14
原创 Qt之使用Qt内置图标
Qt内置图标封装在QStyle中,共七十多个图标,可以直接拿来用,能应付不少简单程序需求,不用自己去找图标并添加到资源文件了。下面是内置图标的枚举定义:QStyle提供了QIcon standardIcon()函数用于将内置图标转换为QIcon,同时提供了QPixmap standardPixmap()函数用于将内置图标转换为QPixmap。这两个函数的第一个参数都是上面贴出的枚举值。
2024-02-04 20:10:19
6768
97
原创 Qt6入门教程 15:QRadioButton
QRadioButton控件提供了一个带有文本标签的单选按钮。QRadioButton是一个可以切换选中(checked)或未选中(unchecked)状态的选项按钮。单选按钮运行用户多选一,也就是说,在一组单选按钮中,每次只有一个能选中,如果用户选择了另一个,那么之前那个就会切换到未选中状态。单选按钮默认开启自动互斥(autoExclusive)。如果启用了自动互斥,属于同一个父部件的单选按钮的行为就和属于一个互斥按钮组的一样。
2024-02-02 01:33:31
3860
75
原创 Qt6入门教程 14:QToolButton
QToolButton可以提供一个弹出菜单,使用setMenu()来进行设置。通过setPopupMode()来设置菜单的弹出模式,缺省模式是DelayedPopupMode,这个特征通常用于网页浏览器的“后退”按钮,在按下按钮一段时间后,会弹出一个可以跳转的页面列表,默认延迟600毫秒,可以用QStyle::SH_ToolButton_PopupDelay进行调整。设置默认的QAction,如果有一个默认的action,该action则会定义QToolButton的文本、图标、TooTip等按钮的属性。
2024-01-31 08:17:17
2934
56
原创 Qt6入门教程 13:QPushButton
QPushButton是与QAbstractButton最接近的完全体按钮,它具备QAbstractButton的所有特性,并且支持设置菜单。
2024-01-29 00:48:42
2796
57
原创 Qt6入门教程 12:QAbstractButton
继承QAbstractButton,你至少得重新实现paintEvent()来绘制按钮的外形、文本和图标。通常也建议重新实现sizeHint(),某些情况下还得重新实现hitButton()(判断鼠标是否在按钮区域内)。下面的代码中集成QAbstractButton实现了MyButton,重新实现了paintEvent。在paintEvent中绘制文本颜色为白色,按钮底色为蓝色(鼠标按下或按钮选中时为红色)。代码中涉及的绘图和布局知识后面会单独介绍。
2024-01-28 12:51:47
3051
25
原创 Qt6入门教程 11:父子对象关系
Qt的对象模型提供了一种Qt对象之间的父子关系,当很多个对象都按一定次序建立起来这种父子关系的时候,就组织成了一颗树。当delete一个父对象的时候,Qt的对象模型机制保证了会自动的把它的所有子对象,以及孙对象,等等,全部delete,从而保证不会有内存泄漏的情况发生。在每一个Qt对象中,都有一个链表,这个链表保存有它所有子对象的指针。当创建一个新的Qt对象的时候,如果把另外一个Qt对象指定为这个对象的父对象,那么父对象就会在它的子对象链表中加入这个子对象的指针。
2024-01-25 22:07:38
3270
106
Boost.Asio C++ Network Programming(高清,带书签,可复制)
2018-01-29
20种数据结构和算法的C++实现
2017-11-17
Qt下用QSplitter实现滑动窗口
2017-11-16
Qt实现窗体缩放
2017-11-15
Qt之调用zlib
2017-11-14
QML实现图像处理,包括浮雕、锐化等效果
2017-11-14
Qt插件调用实例
2017-11-11
WebRTC学习之四:最简单的语音聊天
2017-01-10
Qt动画效果展示
2017-01-01
WebRTC学习之三:录音和播放
2016-12-26
Qt之TCP收发图片的例子 详见博客:https://blog.youkuaiyun.com/caoshangpa/article/deta
2024-10-06
Qt通过UDP传图片 实现自定义分包和组包
2024-10-06
Qt国际化(I18N)
2023-12-31
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
QML实现点赞送礼物效果
2021-01-04
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
Effective Modern C++ 英文原版(带书签)
2018-01-27
++i和i++哪个更高效
2023-02-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人