
Qt
以实战为线索,逐步深入开发各个环节.
优惠券已抵扣
余额抵扣
还需支付
¥29.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
Ilson_
花儿为什么这样红!!!
展开
-
宝塔Linux下安装EMQX服务并设置匿名访问
之前有在Windows和Linux下搭建过EMQX服务并且使用方面都没问题,但那都是使用的用户和密码方式访问,且前提都是通过浏览器进入EMQX的配置页面设置的属性; 但这次使用的是腾讯云租用的宝塔Liniux,由于没有浏览器只能通过命令行方式修改EMQX配置以达到目的;由于事先没看清当前使用的系统类型(Centos),和对QMEX配置不熟悉导致途中遇到挺多问题;原创 2024-05-24 22:13:10 · 785 阅读 · 0 评论 -
Qt之QMqtt 发送图片数据
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议;MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛;在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT);其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用;原创 2024-05-12 15:50:39 · 936 阅读 · 1 评论 -
Qt之QWidget 自定义倒计时器
Qt提供的带进度显示的只有一个QProgresBar,这个控件要么是加载进度从0~100%,要么是持续的两边滚动;而我想要是倒计时的效果,所以QProgresBar并不满足要求,而Qt重写控件相对于MFC来说简直是轻而易举,所以就整了两种不同的倒计时控件;原创 2023-12-21 22:48:29 · 1098 阅读 · 0 评论 -
Qt之QDialog 自定义标题栏
Qt自带标题栏功能还是很强大的,但是确实不能百分百满足需求,除了丑以外还不能随意更改标题栏字体,也不能更改样式;所以为了满足自己的虚荣心让标题栏变得更加好用看好看,特地花时间做了以下测试;原创 2023-07-07 22:28:18 · 1939 阅读 · 0 评论 -
Qt之QMainWindow 自定义标题栏
Qt自带标题栏功能还是很强大的,但是确实不能百分百满足需求,除了丑以外还不能随意更改标题栏字体,也不能更改样式;所以为了满足自己的虚荣心让标题栏变得更加好用看好看,特地花时间做了以下测试;原创 2023-07-06 23:23:41 · 1089 阅读 · 0 评论 -
Qt之QToolTip 解决控件切换时ToolTip刷新区域问题(有残留)
当控件中的文字过长时不宜直接显示,因为会占用很大的空间,QToolTip是一个很好用的提示控件,但是最近使用缺发现了一个问题,虽然解决了但是却不知道是什么问题导致的;首先Arm平台下使用的是Qt5.x版本的,在使用过程中发现:当鼠标移动到一个控件上触发ToolTip事件时显示帮助提示,这时候立马把鼠标移动到另外一个控件上,虽然移动到当前的控件也会触发ToolTip事件显示新的帮助提示,但是却会导致之前显示的提示刷新区域出了问题刷新不完整;原创 2023-04-14 15:24:17 · 811 阅读 · 1 评论 -
Qt之QSettings 变相解决自动排序问题
Qt提供的QSettings非常好用,Windows下可以指定存ini文件还是存注册表,Linux下存ini文件;但是有个不友好的地方就是QSettings使用QMap结构,而QMap底层是红黑树,所以就导致了QSettings保存的ini文件中key会自动排序;为了解决这个问题这里对保存的数据做了点修改达到想要的效果,其实QSettings也提供了自定义规则的读写,不过需要调用"registerFormat"重写注册读写函数规则,比较繁琐有需要可以自行了解下;原创 2023-04-11 23:42:20 · 1520 阅读 · 1 评论 -
Qt之QSqlDatabase 添加自定义物理键盘输入法
在Linux下搞Qt嵌入式开发时,经常会把编译好的程序放到ARM开发板上跑,而在ARM上面由于高版本的Qt5.x跑起来比较吃力,所以选择了低版本的Qt4.x,而Qt4.x对于虚拟键盘的支持不是很理想,对于物理键盘也是只能输入英文,所以为了解决可以在ARM开发板上也能使用物理键盘输入中文,特地做了一个输入法对物理键盘的支持。原创 2022-11-13 14:50:15 · 868 阅读 · 2 评论 -
Qt之QProcess 连续执行多条指令并获取指令返回内容
简述system可以连续执行多条指令,只需要使用分号";"分开指令就行,但是system只能返回int类型结果,得不到想要的指令返回内容,且还会阻塞主线程(除非在命令后面加上 & 在背后工作);有时候在执行多条指令时想要得到返回内容,但是又不想堵塞主线程,这时候QProcess就非常有用了,同样的多条指令需要使用分号";"分开指令就行,指令执行完成后会响应槽函数。调用/************************************************//...原创 2022-04-27 17:03:02 · 2863 阅读 · 0 评论 -
Qt之QComboBox 解决下拉列表样式不生效、item文字重叠
简述Qt提供的QComboBox下拉列表组合控件是非常好用的,既可以当成QLineEdit做编辑用也提供了一个下拉列表供用户选择。当然也有其不好的地方,就是使用Qss样式的时候只能对其表层进行修改下拉列表不生效;如果想要在Qss对下拉列表修改还得重新设置它的QListView;如果你想要设置item的高度结果有可能还会导致item的重叠,因为可能你设置的item高度后他内存并没有重新计算。下拉列表样式不生效QComboBox{ padding: 0 5px; ...原创 2022-01-04 16:45:59 · 4715 阅读 · 0 评论 -
Qt之QDialog 设置Qt::FramelessWindowHint后窗口不显示
简述 QDialog自带的标题栏或者样式可能不是我们想要的,当我们打算重写标题栏或者去掉标题栏或者更改为圆角窗体时我们通常是使用Qt::FramelessWindowHint先去掉标题栏,然后使用Qt::WA_TranslucentBackground使窗体透明;但是这里会有一个问题: // 方式一不显示窗口 QDialog *p1 = new QDialog(this); p1->setWindowFlags(Qt::FramelessWindowHin...原创 2021-12-20 14:48:56 · 3987 阅读 · 0 评论 -
Qt之QMetaEnum 把枚举类型转换成字符串输出
简述 枚举对应的其实就是一个数字,但是有的时候我们想要的不是枚举所对应的数字而是那数字对应的枚举字符串化的结果,因为枚举字符串化看起来的效果比单纯数字看起来更让人明白;当然你也可以使用map手动把枚举跟字符串关联起来使用,但是这样比较麻烦Qt提供了QMetaEnum类可以把枚举直接转成字符串,但是需要借助于QMetaObject。使用 // 先从socket套接字中取出元对象 const QMetaObject *pMetaObj = socket->meta...原创 2021-12-02 15:04:39 · 1461 阅读 · 0 评论 -
Qt之QToolBar 获取QAction位置以及设置QToolBar样式
简述 QAction只是一个抽象的类型不是实体,所以没有具体的位置信息,想要获取QToolBar上的各个QAction区域信息还得靠QToolBar本身。QAction位置 // 获取信号发送对象 QAction *p = qobject_cast<QAction *>(sender()); QRect rect = ui->mainToolBar->actionGeometry(p);QToolBar样式/********...原创 2021-09-17 17:33:28 · 5247 阅读 · 0 评论 -
Qt之QToolBox 实现某个页面的显示与隐藏
简述 Qt提供的QToolBox控件可以很好的实现抽屉式效果,使得界面布局看起来简洁不少,但却是有一个缺点:就是不能对其中的某个Page页隐藏与显示,只能是移除.所以对于某些特定需求来说不是特别的友好,奔着这个目的重写了QToolBox.代码 基于QToolBox所有的功能基础上,在此基础上添加了显示与隐藏某个Item的功能,每个item都有一个itemText()、一个可选的itemIcon()、一个可选的itemToolTip()和一个widget()函数,所以在...原创 2021-07-21 16:48:49 · 4760 阅读 · 0 评论 -
Qt之QPainterPath 叠加与抵消操作
简述 Qt提供的QPainterPath类为绘制操作提供了一个容器,使图形形状能够被构建和重用.其填充规则有Qt::OddEvenFill和Qt::WindingFill之分,使用Qt::OddEvenFill后重叠的path部分会消失,使用Qt::WindingFill后重叠的path部分不会消失,但是使用后者使用不当还是会出现重叠消失的情况.用法QPainterPath MainWnd::makeEllipsePath(const QRectF &rect, Qt::...原创 2021-07-21 15:58:05 · 2524 阅读 · 0 评论 -
Qt之QGraphicsTextItem 去掉选中虚线框
简述QGraphicsTextItem跟QGraphicsItem很类似,派生与QGraphicsObject,拥有QGraphicsItem的一切属性;区别在于QGraphicsTextItem可以作为编辑框使用,但是其原生的风格你可能不是很喜欢,所以需要对其进行改造.点击QGraphicsTextItem后会在其周围显示一个虚线框表示已选中状态,但是这个框并不是我想要的,那怎么去掉他呢?代码void MGraphicsTextItem::paint(QP...原创 2021-06-24 16:40:01 · 2049 阅读 · 0 评论 -
Qt之windeployqt 解决Warning: Cannot find Visual Studio installation directory, VCINSTALLDIR is not set.
简述原创 2021-06-20 21:03:47 · 6245 阅读 · 0 评论 -
Qt之QFlowLayout 使用流式布局动态调节控件分布
简述效果原创 2021-06-06 19:48:33 · 1553 阅读 · 1 评论 -
Qt之QToolButton 实现动态拖拽Drag、Drop功能
简述 最近在做一个项目需要实现工具的动态添加功能,想来想去也只有动态拖拽最为直观,于是摸索了几天才摸索明白,最后选择了QToolButton作为载体重写了一下。当然也可以选择QPushButton作为载体,就看自己需求了。效果 实现 QToolButton的重写:#ifndef MTOOLBUTTON_H#define MTOOLBUTTON_H#include <QToolButton>clas...原创 2021-05-25 23:06:15 · 3143 阅读 · 1 评论 -
Qt之QWidget 制作圆角与半透明窗体
简述 要使窗体变为圆角需要设置窗体为无边框属性 要使窗体可以修改背景的透明度需要设置窗体为背景透明属性 需要对窗体重新绘制 样例代码#include "MWidget.h"#include <QLabel>#include <QPainter>#include <QHBoxLayout>MWidget::MWidget(QWidget *parent) : QWidget(...原创 2021-05-22 17:00:08 · 1425 阅读 · 1 评论 -
Qt之QSlider 添加样式的基础上绘制刻度以及刻度上的文字
简述 QSlider使用默认的样式并且设置显示刻度时刻度线是可以画出来的,但是当我应用QSS样式时刻度线就会消失,QSlider似乎是不支持QSS样式与刻度线并存的样子。而且QSlider也不支持显示刻度线所在的文本数值,无奈之下只好重写了系统的paintEvent事件来手动绘制刻度以及刻度线文本数值。重写paintEvent void MSlider::paintEvent(QPaintEvent *){ QStylePainter p(this); ...原创 2021-03-25 17:41:15 · 4880 阅读 · 1 评论 -
Qt之QtSoapHttpTransport 访问WebService
Web Service技术,能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件就可相互交换数据或集成。依据Web Service规范实施的应用之间,无论它们所使用的语言、平台或内部协议是什么, 都可以相互交换数据。 Qt本身提供了QtSoapHttpTransport类方便我们去访问WebService,QtSoapHttpTransport类提供了一种使用HTTP协议与其他主机之间来回传输SOAP消息的机制。原创 2021-03-17 18:05:09 · 1555 阅读 · 1 评论 -
Qt之QS3Client 使用Amazon S3协议上传下载数据
简述 最近更改需求用到了Amazon S3上传下载数据,什么是Amazon S3?于是网上所搜了一下,它是Amazon Simple Storage Service的缩写,是一种对象存储服务,提供行业领先的可扩展性、数据可用性、安全性和性能。 由于是在Qt里边调用Amazon S3协议,而Qt却并不像Java,C#那样直接封装好了库可以调用,所以只能是网上搜索了好长一段时间才找到一个外国人写的跟Qt有关的库,悲催的是找到的库还不能直接使用,好在这是一个源码库,在经过多番调...原创 2021-03-07 22:20:09 · 1488 阅读 · 6 评论 -
Qt之QTcpSocket 跨线程连续发送大数据
简述 最近在写有关网络传输的项目,使用了Qt封装的QTcpSocket,但是发现很多的跨线程导致死机的问题,也许是我了解的不够深入吧。最开始是自己继承一个线程然后把套接字传递到线程使用遇到程序崩溃;否决后使用了QObject::moveToThread()的方式,虽然程序可以正常发送接收数据但是对于QTcpSocket(moveToThread后属于子线程)与主线程的交互并不是很友好,还是存在一些问题;最后是考虑到了QTcpSocket跨线程崩溃说明它本身内置了一些发送或者接收的线程,这样...原创 2021-01-22 22:22:09 · 4574 阅读 · 6 评论 -
Qt之QSpinBox与QDoubleSpinBox 安装事件过滤器获取鼠标双击事件
通过QSpinBox或者QDoubleSpinBox安装事件过滤器去获取鼠标双击事件,但是不管怎么样就是不响应,或许是由于它是一个组合控件导致的。通过尝试给QLineEdit安装事件过滤器,可以捕获鼠标双击事件,正恰好QSpinBox或者QDoubleSpinBox有个接口lineEdit(),但是它是保护的不能使用。原创 2020-12-05 16:51:22 · 2735 阅读 · 1 评论 -
Qt之QTcpSocket 开启Tcp自带的套接字保活机制
简述 对于正在连接的Tcp网络通信程序中,因为由于某些情况下会出现连接中断的,需要心跳检测机制来探测对方是否在线或者维持网络连接需要。而通常的实现方式是自己写代码使用心跳包的形式,这样子就显得代码复杂化,难以控制和管理。在Tcp中其实也有类似的机制,就是TCP保活机制。SO_KEEPALIVE 使用SO_KEEPALIVE设置Tcp属性后,在程序中表现为:当TCP检测到对端socket不再可用时(不能发出探测包,或探测包没有收到ACK的响应包),select会返回so...原创 2020-11-30 16:06:46 · 4321 阅读 · 0 评论 -
Qt之QMessageBox 自定消息提示框(二)
简述 最近闲来无事写了几个消息提示框,无他,就因为觉得Qt自带的消息提示框特别丑...QPSMessageBox QPSMessageBox继承自QObject,里面所有的内容都是自写的完全与QMessageBox无关,之所以叫这名字也是为了与Qt之QMessageBox 自定消息提示框(一)相关联. 同样,写的时候可能...原创 2020-05-02 23:10:42 · 717 阅读 · 0 评论 -
Qt之QMessageBox 自定消息提示框(一)
简述 最近闲来无事写了几个消息提示框,无他,就因为觉得Qt自带的消息提示框特别丑...QPSMessageBox QPSMessageBox继承自QDialog,里面所有的内容基本跟QMessageBox差不多,用法也差不多,区别就是改掉了样式变成苹果手机提示框的样子. 其实做的还是有点low,需要改进的可以...原创 2020-05-02 22:41:28 · 1901 阅读 · 0 评论 -
Qt之QDoubleSlider 继承QSlider的双向滑块
简述 Qt自带的QSlider滑块控件只能是单向的控制阈值,某些情况下要使得可以左右上限可调控的话只能是使用两个或者多个QSlider,但是也有很多是朋友是通过继承QWidget自写了一个可调控的双向滑块,虽然能满足需求,但是样式、性能等方面也许有所不足,这里我推荐一个Qt的第三方控件库Qt Extension Library,其中包含了一个对QSlider的重写类QxtSpan...原创 2020-01-13 18:38:42 · 4295 阅读 · 0 评论 -
Qt之QLayout 遍历所有子项
在使用QLayout做窗口布局时,有时候我们需要对其进行遍历得到子项,一般的我们都是通过自带的函数children()得到一个链表,然后再对链表进行遍历,首先我设置布局如下://设置布局QVBoxLayout *pLayout = new QVBoxLayout;pLayout->addWidget(wiget1);pLayout->addWidget(wi...原创 2018-11-21 18:18:36 · 10613 阅读 · 1 评论 -
Qt之QTableView 保持滚动条自动滚动到底部
在使用QTableView添加数据时,当数据量超出显示范围时会自动的打开滚动条(如果设置了在需要时打开滚动条属性),而默认的是滚动条一直是保持在最顶部。 但是有些时候我们添加数据时是需要查看添加的最新结果的,所以一般都会把滚动条滚动到最新数据那里,这里有几种方式可根据需要选择://保持滚动条在顶部(默认)scrollToTop();//保持滚动条在底部...原创 2018-11-16 11:53:58 · 15496 阅读 · 0 评论 -
Qt之QTableView 根据换行符"\n"实现自动换行
要想实现QTableView根据换行符"\n"自动换行,首先你添加到QTableView的行中需带有换行符"\n",如添加一行文字为:"现在时间:\n2018年11月15号" 如果不做处理则显示为:"现在时间:2018年11月15号" 如果设置自动根据文字内容换行则会根据换行符"\n"分为两行显示:"现在时间:"&qu原创 2018-11-15 17:14:33 · 5295 阅读 · 2 评论 -
Qt之QToolBar 对其中的某些项进行控制显示/隐藏
对于QToolBar我们虽然把所有的功能都添加上去了,但是有时候我们需要对其功能进行控制,比如说我们需要其输入密码才能有权限打开某一些功能,对于没有密码的就屏蔽一些功能. 首先我们给QToolBar添加一个按钮:QAction *pAction1, *pAction2, *pAction3;QMenu *pMenu = new QMenu;pAction...原创 2018-11-10 12:19:20 · 3106 阅读 · 0 评论 -
Qt之QPropertyAnimation 在动画中改变控件大小时需要注意
在Qt中封装了专门处理动画的框架类QPropertyAnimation,在初始使用QPropertyAnimation时我遇到了一个问题,那就是随着时间的改变我设置控件的"geometry"属性却只是改变了控件的位置,而控件大小却没有改变。 源代码如下://新建一个控件QPushButton *pButton = new QPushButton(this)...原创 2018-11-12 22:22:34 · 2978 阅读 · 0 评论 -
Qt之QGraphicsItem 使用信号槽时需要注意的事项
1. 继承QGraphicsItem的子类需要首先继承自QObjectd再继承QGraphicsItem2. 在子类头文件方需要添加声明 Q_OBJECT3. 需要重新编译class MyItem : public QObject, public QGraphicsItem{ Q_OBJECTpublic: MyItem() {} signals: ...原创 2018-11-09 15:19:07 · 1430 阅读 · 0 评论 -
Qt之QAbstractAnimation 实现网易云音乐背景墙图片轮换效果
最近在做一个小项目,需要实现网易云音乐背景墙的轮换效果,如下: 以下是.h代码: #ifndef ANIMATEDWALLWG_H#define ANIMATEDWALLWG_H#include <QLabel>#include <QWidget>#include <QVariant>#inc...原创 2018-11-24 12:59:40 · 1456 阅读 · 1 评论 -
Windows 10 + Qt 5.9.1 + CMake 3.13.2 环境下编译 OpenCV 3.2
一、开发环境1. Windows 10 Pro X642. Qt 5.9.1: http://www.qt.io/download/3. CMake 3.13.2: http://www.cmake.org/download/4. OpenCV 3.2: http://opencv.org/二、开始安装&解压1. 安装Qt 5.9.1 (路径C:\Qt5.9....原创 2018-12-22 00:45:04 · 1182 阅读 · 0 评论 -
Windows 10 + Qt 5.9.1 + OpenCV 3.2 配置环境
一、整理之前编译好的文件1. 在之前编译好的路径内找G:/OpenCV/opencv/build/install/include; G:/OpenCV/opencv/build/bin; G:/OpenCV/opencv/build/lib;2. 把这三个文件拷贝到同一级目录下G:/OpenCV/opencv/build,然后把G:/OpenCV/opencv/build目录下...原创 2018-12-22 12:17:11 · 911 阅读 · 0 评论 -
Qt之ToolBox 实现多个Bar可以同时展开
最近在找一个抽屉式控件,但是Qt自带的QToolBox控件一次只能展开一个这并不是我想要的,所以无奈之下只好自己写了一个ToolBox。 为了方便演示这里只是简单的添加了给每一个Bar添加了几个按钮,先来看看效果:1. 控件由SSToolBox作为父类,SSCameraToolBox作为子类(因为我需要几个不同的ToolBox,所以做了继承),SSTo...原创 2018-12-25 15:30:51 · 8157 阅读 · 0 评论 -
Qt之QGraphicsScene、QGraphicsView 实现窗口透明情况下的点击事件
在用Qt做窗口透明处理时只设置窗口透明属性是接收不到鼠标事件的,想要在窗口透明的情况下去接收鼠标消息还需要依靠QGraphicsScene与QGraphicsView。具体的做法是: 一、先把窗口透明化: //1. 设置窗口大小、样式 this->setGeometry(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)...原创 2019-01-08 12:51:19 · 3641 阅读 · 1 评论