基本图形绘制 QPainter绘制基本图形 **注意:**QPainter画弧度所使用的角度值,是以1/16°为单位的,在画弧度的时候1°用16表示。...---- QPainterPath绘制简单图形 QPainterPath为QPainter类提供一个存储容器,里面包含了所要绘制的内容的集合及绘制顺序,如长方形、多边形、曲线等各种任意图形。...Qt::RoundJoin两条线相汇形成圆角连接 填充模式——Qt::FillRule Qt::OddEventFill填充规则:从图形中某一点画一条水平线到图形外,若这条线与图形边线的交点为奇数则说明此点位与图形的内部...;若交点为偶数则此点在图形的外部。...Qt::WindingFill填充规则:从图形中某一点画一条水平线到图形外,每个交点外边线方向可能向上、向下、方向相反的相互抵消,若结果不为0表示此点在图形内,若为0则在图形外。
Qt官方已经有QCharts模块,如下图所示: ? 另外还有一个QCustomPlot的基于Qt的第三方图形库,如下图所示: ?...如果您使用的是Qt 5.0或更高版本,则需要在.pro文件中的QT变量中添加printsupport。...在上面显示的情况下,此操作在greaterThan(QT_MAJOR_VERSION,4)个条件之后进行。 确保使用较旧的Qt版本时未添加printsupport(和widgets)。...libgl1-mesa-dev libglu1-mesa-dev 链接终止,显示:“Undefined reference to QPrinter(…)” 确保已将模块printsupport添加到项目文件中的QT
之前写了一篇 浅谈Qt控件绘制 。之所以叫浅谈是因为调用都是比较表层的调用。其实 Qt 的绘制,可以说用 Qt 的人都有用到,但是对于绘制底层,了解的人并不见得很多。...如果想探究指令集部分的使用,需要到源码目录 qtbase\src\gui\painting ,根据目录下代码文件名即可知道是哪种指令集,一目了然。 回过头来再看上边的那些函数调用。...对于稍微对 Qt 源码有一些理解的同学对 detach() 并不陌生,它本是 Qt 中最常用的 Copy-on-Write 的实现。不过经常用于在类的成员方法中调用,今天看到它这种用法着实惊艳到了。...后记 对于 Qt 绘制的深入探究,可以说是受益匪浅,这篇文章只是描述了冰山一角,其实整个流程比这个简要概括要高级的多。从研究 Qt 源码至今,对整个 Qt 项目的感受与评价,已和往日截然不同。...而网上大部分人对 Qt 的评价,其实在我看来,无异于盲人摸象。只有对源码稍有了解的人,才知道 Qt 这个项目,对于客户端开发人员的价值。
Qt图形视图框架、动画框架 Qt提供了图形视图框架(GraphicsView Framework)、动画框架(The Animation Framework)、状态机框架(The State Machine...框架中包含一个事件传播架构,提供了和场景中的图形项进行精确的双精度交互能力,如将场景时间传递给图形项,也可以管理图形项目之间的事件传播。...; 下面这几个函数都有一个Qt::ItemSelectionMode参数来指定怎样进行图形项的选取,选取模式如下: 动画框架 动画框架的目的是提供一种简单的方法来创建平滑的、具有动画效果的GUI界面...该框架是通过控制Qt的属性来实现动画的,可以应用在窗口的部件和其他QOBject对象上,也可以应用在图像视图框架中。...Qt的事件系统来驱动状态机。
源码 地址:https://download.qt.io/archive/qt/ 源码使用tag版本,6.0以上版本有cmakelist.txt可以直接cmake编译(但差的三方库比较多),6.0以下的版本
简述 Qt 中提供了强大的 2D 绘图系统,可以使用相同的 API 在屏幕和绘图设备上进行绘制,它主要基于QPainter、QPaintDevice 和 QPaintEngine 这三个类。...它可以绘制一切想要的图形,从最简单的一条直线到其他任何复杂的图形,例如:点、线、矩形、弧形、饼状图、多边形、贝塞尔弧线等。...此外,QPainter 也支持一些高级特性,例如反走样(针对文字和图形边缘)、像素混合、渐变填充和矢量路径等,QPainter 也支持线性变换,例如平移、旋转、缩放。...50); font.setItalic(true); painter.setFont(font); // 绘制文本 painter.drawText(rect(), Qt...::AlignCenter, "Qt"); } 首先为该部件创建了一个 QPainter 对象,用于后面的绘制。
在工作中经常要根据 UI 提供的稿子做自绘控件,而且在新项目中,我自己基于 Qt 做了一套项目自用控件库,还会涉及到换肤,所以对 Qt 的控件绘制,着重的研究了一下。...分类 对于自绘控件的分类,我将其分为两大类: 基于 Qt 控件类派生 基于 QWidget 派生 除非是行为跟 Qt 本身的控件相差太多,或者是缺少需要的交互逻辑,否则的话尽可能从 Qt 现有的控件类派生...Qt 本身的控件绘制,就可以给我们很大的启示。...Qt 的绘制精髓就在于此。对于绘制, Qt 控件是交给 style 来管理的。打开源码路径 qtbase\src\widgets\styles 这里边保存了 Qt 绘制的基本样式。...这就是整个 Qt 绘制的大本营了。而对于 Qt 控件的实际绘制逻辑,其实也对做自绘控件库也十分有帮助,不过既然是浅谈,也就不再罗嗦。
Qt在各个平台下都是对平台API进行了一些包装。Windows下是对Win32API的封装。如果是Windows平台的GUI Application就一定是从WinMain开始。...Qt本身也要依赖这些,只不过在上边进行了一些封装。调到我们自己的程序里看到的就是winEvent()或者是一些QEvent了。...Qt的这个回调函数是qt_internal_proc()。那下一个问题就是在哪里注册的这个回调函数。...LRESULT QT_WIN_CALLBACK qt_internal_proc(HWND hwnd, UINT message, WPARAM wp, LPARAM lp) { if (message...return result; } Qt就是这样将Win32的调用包装成了自己的调用。
源码 https://gitee.com/joeylolipop/qtcharts.git qt安装 git checkout 5.7 切换到匹配的qt版本,qt5.13以后使用的vs2015,crt...版本不兼容2015以前的版本 打开vs cmd运行环境,vcvars32.bat文件,切换到qt\bin目录运行qtenv2.bat 配置qmake CONFIG+=“debug_and_release...build_all”(在qtchart的src目录里面) 执行nmake编译,nmake docs(文档要单独拷贝到doc下面去),nmake install安装到qt安装目录 qtcharts使用...qt项目文件中添加QT += charts qt头文件及宏定义添加如下 #include QT_CHARTS_USE_NAMESPACE qt creator...如果链接错误,删除debug生成目录,重新生成一遍(qt creator没有重新生成,编译错误容易保留) QXYseries QLineSeries直线 QSplineSeries曲线 使用append
上次研究了一下Qt是如何对Win32初始化程序进行包装的。这次研究下Qt的事件循环和Windows消息循环之间的联系。...上次说到QApplication注册了一个qt_internal_proc方法来处理消息循环,但是在这个方法中并没有看到一些关于Qt事件的蛛丝马迹。例如鼠标事件、键盘事件等。...其实在qt_internal_proc方法中有个调用值得注意:sendPostedEvents()。...\sa QWindowCreationContext \internal \ingroup qt-lighthouse-win */ 6....事件和Windows消息循环彻底联系起来…… 其实这只是一个添加事件、获取事件的简单流程,仅仅为了研究Qt事件和Windows消息循环的联系。
我们需要屏蔽qDebug的打印可以在pro文件中定义DEFINES+=QT_NO_DEBUG_OUTPUT,即可屏蔽其输出。...本文将介绍QT_NO_DEBUG_OUTPUT宏的实现和使用到的一个小技巧。...源码 Qt 5.12.1源码中QT_NO_DEBUG_OUTPUT宏实现: #define QT_NO_QDEBUG_MACRO while (false) QMessageLogger().noDebug...#if defined(QT_NO_DEBUG_OUTPUT) # undef qDebug # define qDebug QT_NO_QDEBUG_MACRO #endif 上面看起来代码有点多...,我们再看看Qt4版本下QT_NO_DEBUG_OUTPUT宏的实现: #ifdef QT_NO_DEBUG_OUTPUT # define qDebug while(false) qDebug #endif
想起之前在公司做的关于 HighDPI 的适配,在 Qt4 下可以说是比较繁琐,代码敲到手疼。早就听说 Qt5.6 开始支持了 HighDPI ,一直没机会看详细的代码。...使用 其实想得到 Qt 给予的 HighDPI 支持,是非常之简单。只要在 QApplication 构造之前,开启 Qt::AA_EnableHighDpiScaling 这个属性。...迫不及待地翻看了源码。 代码实现 其实关于 HighDPI 的代码,基本就在两部分中。...只看堆栈调用的话: > Qt5Guid.dll!QHighDpiScaling::initHighDpiScaling() 行 254 C++ Qt5Guid.dll!...而这个列表第一次被添加的时机堆栈: > Qt5Guid.dll!
1、回顾 说起到qt的编译,真是领人痛心啊,不仅编译选项繁多,而且编译时间比较久,总是能使想编译qt源码的人望而却步,呵呵。。。...qt源码是一个很大的挑战,不是因为他难以编译,主要是qt的编译选项和他的sdk跨平台。 ...webengine编译错误 3、依赖库 在此我还想说明几点问题,是关于我们编译qt源码的一些问题,我们不仅仅是要把qt的源码编译成功,而是要搞清楚,编译qt我们的步骤和思路,下边说的这点儿意见,...,百度输入qt,就可以啦,进入相关源码下载,然后进入single目录,就可以下载源码。...由于我之前编译qt5.6.0时,使用的git拉取的webkit源码(qt5.7webkit),所以没有出现问题,后来我编译qt5.6.1时,直接把webkit源码从5.6.0拷到5.6.1,位了速度快把
0x03 源码体现 (1) 继承关系源码体现 QObject构造函数(省略无关细节): QObject::QObject(QObject *parent) : d_ptr(new QObjectPrivate...parent->d_func()->children.append(q); /* 这里的q是QObjectData里面的q_ptr指针 */ ... } (2) 父对象析构后析构子对象源码体现
当时仔细研究了一下QImage的源码,将一些碎片化的东西记录在了某个平台上,如今翻出来了,感觉这些内容还可以再细化细化,有时间的话,详细整理,先将以前的碎片在此记录下来。...值得注意的是,Qt中用到的swap是标准库的。...QString key = QLatin1String("qt_pixmap") % info.absoluteFilePath() %...在读图片的时候会将Qt支持的图片格式全都尝试一遍,包括 imageformat 下的插件。优先寻找最可能匹配的格式( format 这个参数)。找到后拿到这个格式的 handler 。
Qt Designer 的使用请看: 用 Qt Designer 来设计 UI 界面,并转化为 python 代码运行实例演示 所以我们需要的就是: 1....Qt Creater 应用程序 【包含 Qt Designer,其实只需要安装 Qt Designer 就好了】 2. PyQt5 和 PyQt5-tools 这两个库 下面来讲它们的安装。...Qt Designer 的安装:【推荐】 PyQt5 图形界面 - Qt Designer 独立安装包,仅需 30M!...python 图像化界面绘制工具 Qt Creater 的安装: 获取地址:Qt 官方下载 文件有点大,耐心安装吧! 安装步骤如下: 第一次用就直接注册一个账号。
该工具库基于Qt开发,所以也继承了Qt的跨平台特性。...qtcreator中,发现怎么都搞不定,烦啊,搞得一点兴趣都没有了,其实默认Qt的安装包自带的mingw编译器,很多人默认选择的也是mingw编译器的Qt,而安装包中的Qtcreator呢又是msvc编译器编译的...,因为版本不对所以无法集成,那怎么办呢,用户其实很多时候只需要new一个类出来放对应的布局或者窗体上即可,然后调用对应的方法来设置和处理,根本不想这么复杂,于是抽点时间将qwt中的所有控件的完整源码抽取出来...,直接源码集成到你的项目,在你的项目只需要引入pri文件即可,永远不要再去搞烦人的编译插件了。...二、代码思路 QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport concurrent
经常写 Qt 的程序,就会发现,不管是写控制台程序还是带窗体的应用程序,在 Qt 中的入口都是int main()。但实际上抛开其他平台不说,就是在 Windows 平台上,二者的入口就是有区别的。...qtmain contains the Windows startup code and is required for linking to the Qt DLL..... */ QT_USE_NAMESPACE int qMain(int, char **); extern "C" int main(int, char **); /* WinMain() - Initializes...而这一步的操作,应该就是 VS 中 Qt 插件的功劳了。...所以由此可推断,如果用 VS 裸写 Qt 的程序,在链接的时候除了链接必要的 Qt 库文件,还要自己手动把这个 qtmain.lib 链接进去。
线程 QT中的QThread提供了与平台无关的线程,一个QThread代表了一个应用程序中可用独立控制的线程,它与进程中的其他线程共享数据,但是是独立执行的,QThread从run()函数开始执行,默认...run()通过exec()来开启事件循环,并在线程内运行一个Qt事件循环。
一、Qt事件 1、事件介绍 事件是应用程序内外部产生的事情以及动作的统称,常见的所有事件例如鼠标事件QMouseEvent,键盘事件QKeyEvent等等都是继承自QEvent 2、事件的处理 在Qt中几乎所有的...Numlock处于打开状态,第七条是输入法切换的 void Widget::keyPressEvent(QKeyEvent *event) { if(event->modifiers() == Qt...ControlModifier) //检查是否按下了Ctrl键,event->modifiers返回当前按键事件的修饰键状态 { if(event->key() == Qt...::LeftButton) { qDebug() << "鼠标左键"; } if(event->button() == Qt::RightButton)...{ qDebug() << "鼠标右键"; } if(event->button() == Qt::MidButton) { qDebug() <
领取专属 10元无门槛券
手把手带您无忧上云