折腾开发环境的一天

一直使用 Visual Studio Code 来将就着阅读 Qt 源码,至于体验也只能说是将就着能看,跳转和调试功能基本处于停摆状态。之前很少使用 Qt Creator,大多使用 Visual Studio 开发 Qt 项目,因为在接触 Qt 之前,已使用 VS 多年,VS 也可以满足 Qt 项目开发的需求,何况 Qt 对我而言更多的只是一个 UI 库,重心也没有全部在 Qt 上面,所以也没有动力去花时间熟悉另一个 IDE 了。 今日心血来潮,想折腾一下 Qt Creator,后面用它来看 Qt 源码也许会方便些。 我想虽然 Qt6 已经改用 CMakeList 管理源码,但 Qt5 的源码依然使用的是 QMake,并提供了 Qt Creator 项目文件,使用 Qt Creator 来阅读 Qt5 源码也许会更加便利。

编程基础

玩转Qt 2D绘图之仪表盘实例

在前面的《玩转 Qt 2D 绘图》系列文章中,已经介绍了 2D 绘图中常用的知识,本文主要通过一个汽车仪表盘的实例来综合应用前面所介绍知识点,并且还介绍了一些 Qt 绘图的常用技巧。 相关文章: 玩转Qt 2D绘图之坐标系 玩转Qt 2D绘图之画家的工具 玩转Qt 2D绘图之画家

Qt

谈一谈Qt的布局技巧

1. 手动拖放通过在 Qt Designer 中手动拖放控件,可以快速实现界面布局,如下图所示: 这种方式对初学者非常友好,可以快速上手开发一个界面,增加成就感。但我们需要知道,拖放布局不是 Qt 布局的全部,这种方式仅适合简单的界面布局。

Qt

玩转Qt 2D绘图之画家

在 Qt 2D 世界中,图形基本都由点、线、矩形、多边形、椭圆、圆、折线、曲线、文本、贴图等基本元素辅以着色而构成,而且 QPainter 类已经提供了这些元素的绘制方法,花点时间掌握这些方法,也就掌握了 Qt 2D图形控件的制作,余下的就是勤学多练、孰能生巧了。

Qt

玩转Qt 2D绘图之画家的工具

软件是对现实世界的抽象,在设计软件接口时通常也会参考现实世界来进行设计。 在现实世界中,画家使用画笔、画刷这些工具在宣纸上作画,而在 Qt 中,画家是 QPainter 对象(画家的大脑则是 QPaintEngine),纸张可以是 QPaintDevice 的任何子类对象,如 QWidget、QImage、QPixmap、QGLPixelBuffer 等;在 QPainter 选好纸张后,就可以使用画笔来勾勒物体的轮廓了,Qt 中的画笔是 QPen 对象;画完轮廓后,可能还需要使用画刷来填充轮廓,Qt 中的画刷是 QBrush 对象。

Qt

玩转Qt 2D绘图之坐标系

Qt中提供了强大的 2D 绘图系统,可以使用相同的API在屏幕和绘图设备上进行绘制,主要基于 QPainter、QPaintDevice和 QPaintEngine 这三个类实现,其中: QPainter执行具体的绘图操作,QPainter 类提供了大量的GUI编程所需的函数,如drawLine、drawImage等。 QPaintDevice 是一个基类,提供绘图设备的抽象接口,它是一个二维空间的抽象,可以使用QPainter在其上进行绘制,常见的继承该类的绘图设备有QImage、QPixmap、QWidget、QOpenGLPaintDevice等。 QPaintEngine 提供了一些抽象接口,用于实现QPainter在不同的设备上进行绘制。QPaintEngine 由 QPaintDevice 创建并管理。

Qt

Qt自定义和美化菜单

在Qt中可以通过QSS对菜单进行样式设置,而且对于非标准菜单项我也可以通过自定义Widget的方法来实现,本文讲述在Qt中QMenu的使用方法。

Qt

Qt中图片按九宫格模式缩放

我们在缩放图片时,都期望能保持图片的原长宽比,因为这样可以防止图片变形,但往往事与愿违,有些时候我们没办法保持原图的长宽比不变,比如需要在保持图片高度不变的情况下,仅横向拉伸图片,此时就会导致图片变形。 为了解决这种问题,我们可以考虑使用九宫格模式进行图片的缩放。 九宫格模式就是将图片切分为九块(不强制切分的每一块必须等分),如下图所示,在图片缩放时,我们通常保持1、3、7、9四个顶点位置的图片不变,对2、4、5、6、8五个区域进行缩放。

Qt

QListWidget使用记录

1. 解决无法拖入文件到QListWidget一般而言,只需要做如下操作,QWidget即可支持拖入文件: 12345678setDragDropMode(QAbstractItemView::DropOnly); // 仅支持拖入文件// 重写dragEnterEvent,当拖入文件进入时被调用,可以在该函数中取消拖入操作void dragEnterEvent(QDragEnterEvent* e) override;// 重写dropEvent,当拖入文件并释放鼠标时被调用void dropEvent(QDropEvent* e) override; 但在执行上述操作后,我们拖入文件到QListWidget时,却只能收到dragEnterEvent事件,却无法收到dropEvent事件。

Qt

Qt静态库编译

使用Qt静态库违背了Qt的免费使用协议! 1. 编译编译Qt源码需要提前安装如下工具: nasm perl gperf win_flex_bison llvm python2 openssl

Qt

基于Qt的无边框窗体实现

Qt虽然提供了诸如 Qt::FramelessWindowHint 之类的属性可以移除窗体的边框,但是移除边框之后,窗体的一些默认行为同时也被移除了,如鼠标拖动改变大小、双击标题栏最大化等,这些行为需要开发者自己来实现。 本文主要介绍实现无边框窗体的几种方案,并在最后分享了作者实现的方案。 笔者认为,一个完美的无边框窗体解决方案需要支持如下功能: 支持通过使用鼠标拖拽来改变窗体位置和大小; 支持双击标题栏最大化窗体和还原窗体; 支持 Windows Areo Snap 特性; 支持系统阴影; 支持跨不同 DPI 的屏幕拖拽; 适应分辨率和 DPI 改变;

Qt

Qt加载字体文件

本文仅简单记录如何使用 Qt 加载外部字体文件,并遍历字体名称和样式名称。

Qt
12