之前写了一篇 浅谈Qt控件绘制 。之所以叫浅谈是因为调用都是比较表层的调用。其实 Qt 的绘制,可以说用 Qt 的人都有用到,但是对于绘制底层,了解的人并不见得很多。...如果想探究指令集部分的使用,需要到源码目录 qtbase\src\gui\painting ,根据目录下代码文件名即可知道是哪种指令集,一目了然。 回过头来再看上边的那些函数调用。...对于稍微对 Qt 源码有一些理解的同学对 detach() 并不陌生,它本是 Qt 中最常用的 Copy-on-Write 的实现。不过经常用于在类的成员方法中调用,今天看到它这种用法着实惊艳到了。...后记 对于 Qt 绘制的深入探究,可以说是受益匪浅,这篇文章只是描述了冰山一角,其实整个流程比这个简要概括要高级的多。从研究 Qt 源码至今,对整个 Qt 项目的感受与评价,已和往日截然不同。...而网上大部分人对 Qt 的评价,其实在我看来,无异于盲人摸象。只有对源码稍有了解的人,才知道 Qt 这个项目,对于客户端开发人员的价值。
源码 地址:https://download.qt.io/archive/qt/ 源码使用tag版本,6.0以上版本有cmakelist.txt可以直接cmake编译(但差的三方库比较多),6.0以下的版本
在工作中经常要根据 UI 提供的稿子做自绘控件,而且在新项目中,我自己基于 Qt 做了一套项目自用控件库,还会涉及到换肤,所以对 Qt 的控件绘制,着重的研究了一下。...分类 对于自绘控件的分类,我将其分为两大类: 基于 Qt 控件类派生 基于 QWidget 派生 除非是行为跟 Qt 本身的控件相差太多,或者是缺少需要的交互逻辑,否则的话尽可能从 Qt 现有的控件类派生...Qt 本身的控件绘制,就可以给我们很大的启示。...Qt 的绘制精髓就在于此。对于绘制, Qt 控件是交给 style 来管理的。打开源码路径 qtbase\src\widgets\styles 这里边保存了 Qt 绘制的基本样式。...这就是整个 Qt 绘制的大本营了。而对于 Qt 控件的实际绘制逻辑,其实也对做自绘控件库也十分有帮助,不过既然是浅谈,也就不再罗嗦。
源码 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在各个平台下都是对平台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的调用包装成了自己的调用。
上次研究了一下Qt是如何对Win32初始化程序进行包装的。这次研究下Qt的事件循环和Windows消息循环之间的联系。...上次说到QApplication注册了一个qt_internal_proc方法来处理消息循环,但是在这个方法中并没有看到一些关于Qt事件的蛛丝马迹。例如鼠标事件、键盘事件等。...其实在qt_internal_proc方法中有个调用值得注意:sendPostedEvents()。...\sa QWindowCreationContext \internal \ingroup qt-lighthouse-win */ 6....事件和Windows消息循环彻底联系起来…… 其实这只是一个添加事件、获取事件的简单流程,仅仅为了研究Qt事件和Windows消息循环的联系。
「注意:DTLS服务器示例旨在与DTLS客户端示例一起运行。」 该服务器由DtlsServer类实现。...QSslConfiguration::defaultDtlsConfiguration(); serverConfiguration.setPreSharedKeyIdentityHint("Qt...emit warningMessage(tr("A spurious read notification")); return; } QByteArray dgram(bytesToRead, Qt...如果新客户端已被验证为可访问的DTLS客户端,则服务器将创建并配置新的QDtls对象,并启动服务器端握手: ......安装目录」找到: C:\Qt\{你的Qt版本}\Examples\{你的Qt版本}\network\secureudpserver 「相关链接」 https://doc.qt.io/qt-5/qtnetwork-secureudpserver-example.html
我们需要屏蔽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
uos操作系统中使用QT开发RTSP 视频流服务器,以下的实现方式使用的是单播方式,除了单播模式还有多播模式。...可以通过自己开发的rtsp服务器将摄像头的数据时时推送到服务器中,其他用户可以通过访问视频流地址rtsp://127.0.1.1:8554/live,直接访问摄像头播放的内容,也就是通常说的摄像头直播。...本篇文章使用开源框架live555开发一个属于自己的视频流服务器。 安装环境依赖 live555的使用需要较多的环境依赖,一下安装都是编译依赖相关内容。...libusageenvironment3 sudo apt install libasound2-dev sudo apt install libx264-dev sudo apt install libfaac-dev 编译环境 qt...使用播放工具mplayer 安装播放工具: sudo apt install mplayer 播放rtsp地址: mplayer rtsp://127.0.1.1:8554/live git传送门 (源码
想起之前在公司做的关于 HighDPI 的适配,在 Qt4 下可以说是比较繁琐,代码敲到手疼。早就听说 Qt5.6 开始支持了 HighDPI ,一直没机会看详细的代码。...使用 其实想得到 Qt 给予的 HighDPI 支持,是非常之简单。只要在 QApplication 构造之前,开启 Qt::AA_EnableHighDpiScaling 这个属性。...迫不及待地翻看了源码。 代码实现 其实关于 HighDPI 的代码,基本就在两部分中。...只看堆栈调用的话: > Qt5Guid.dll!QHighDpiScaling::initHighDpiScaling() 行 254 C++ Qt5Guid.dll!...而这个列表第一次被添加的时机堆栈: > Qt5Guid.dll!
在实际项目开发中HTTP是我们经常使用的,嵌入式设备往往作为客户端,而服务器一般都是部署在云端等设备上,这对于调试过程其实是很不方便的,其实网上也有更多工具可以在自己的PC上一键部署为HTTP服务器。...通过搜索一遍,Qt有一个比较好的Http服务器库--QtWebApp。 什么是QtWebApp QtWepApp是一个C++中的HTTP服务器库,其灵感来自Java Servlet。...记录器插入Qt,并将日志消息从qDebug(…)重定向到qFatal(…)到文件,同时还添加了时间戳、线程ID、会话ID等附加属性。对记录器配置文件的更改将自动变为活动状态,而无需重新启动程序。...配置文件参数说明: host和post:代表web服务器的IP地址和端口。公用Web服务器使用端口80,而内部Web服务器通常在端口8080上侦听。...每隔一个cleanupInterval时间间隔(以毫秒为单位),服务器都将关闭一个空闲线程。 readTimeout:设置通过打开大量连接而不使用它们,来保护服务器免受简单的拒绝服务攻击。
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的实验性项目Http服务器,常未发布到Qt主分支中,但该项目是学习Http服务器的不错代码。...QString("Running on http://127.0.0.1:%1/ (Press CTRL+C to quit)").arg(port); return app.exec(); } 源码地址...https://github.com/qt-labs/qthttpserver
该工具库基于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 下载 二、Qt 安装 三、组件选择 一、Qt 下载 ---- Qt 开发环境下载地址 : https://download.qt.io/archive/qt/ 该界面可以下载 Qt...各个版本的开发环境 ; Qt 版本选择 , Qt 的各个大版本都在同步更新 , 如 5.1 , 5.9 , 5.14 , 6.0 等 , 每个版本都有不同的性能和功能 , 每个版本进入后的二级目录的小版本...Qt 从 5.15 版本开始 , 不再提供离线安装包 , 需要自己下载源码编译安装 , 因此这里选择安装 Qt 5.14.2 版本 ; 进入 https://download.qt.io/archive.../qt/5.14/5.14.2/ 界面后 , 在根目录中分别是 windows , mac , linux 三个平台的 Qt 安装包 , 选择对应的平台即可 ; 下载 Windows 对应的安装包 qt-opensource-windows-x86...-5.14.2.exe ( 点击该链接下载 ) ; 二、Qt 安装 ---- 双击安装软件 , 点击 " Next " , 没有 Qt 账号 , 输入账户名邮箱 , 密码 , 确认密码 , 同意协议
QT容器 QString类 隐式共享: 隐式数据共享机制去最大化资源有效利用和最小化复制克隆操作。...BOOL qDebug()<<s4.startsWith("哔哩哔哩"); QString s5 = "tom"; qDebug()<<s5.startsWith("tom",Qt...是否包含 qDebug()<<s5.contains("o");//同样可以表明大小写是否敏感 //比较 qDebug()<<QString::compare("Tom","tom",Qt...it_mrw.key()<<":"<<it_mrw.next().value(); } qDebug()<<moneyHash; ---- QVariant类 QVariant类能保存很多Qt...类型的值,包括QColor,QBrush,QFont,QRect,QString及QSize等等,而且能存放Qt的容器类型值。
领取专属 10元无门槛券
手把手带您无忧上云