
QT
文章平均质量分 58
hp_cpp
这个作者很懒,什么都没留下…
展开
-
关于QJson能解析的最大数据长度的源码分析
关于QJson能解析的最大数据长度的源码分析最近在使用QJson的时候,发现在60Mb+不到70Mb的时候,就会解析失败。我们看看Qt中有没有对QJson能解析的数据长度的限制。在文件Qt\Qt5.14.2\5.14.2\Src\qtbase\src\corelib\serialization\qjsondocument.cpp第392-396行QJsonDocument QJsonDocument::fromJson(const QByteArray &json, QJsonParseEr原创 2021-01-21 18:19:35 · 3202 阅读 · 4 评论 -
编译出带加密功能的 SQLite Qt 插件并用SQLiteStudio进行查看
编译出带加密功能的 SQLite Qt 插件并且用SQLiteStudio查看加密后的数据库博客地址:https://www.devbean.net/2012/07/qt-sqlite-plugin-with-encryption/github地址:https://github.com/devbean/QtCipherSqlitePlugin截止2021年1月,QtCipherSqlitePlugin的最新release版本是v1.3基于wxSqlite4.5.1在Qt中编译QtCipherSql原创 2021-01-20 20:48:53 · 2901 阅读 · 2 评论 -
利用std::map和std::greater对key进行降序排列
std::map默认是用std::less对key进行升序排列的,利用std::greater可以对key进行降序排序。在Qt中,如果我们需要对QString或者int为key的map进行降序排列,除了自定义类型外,其实还可以利用std::map和std::greater实现代码:#include <QCoreApplication>#include <map>#include <algorithm>#include <QDebug>int原创 2020-10-26 17:54:30 · 3824 阅读 · 0 评论 -
对QMap中的key进行自定义排序
QMap的默认排序是按照key的升序进行排序。如果我们想改变QMap的key的排序规则,则需要提供operator<()QMap’s key type must provide operator<(). QMap uses it to keep its items sorted, and assumes that two keys x and y are equal if neither x < y nor y < x is true.Qt帮助文档给的例子: #ifnd原创 2020-10-25 17:17:52 · 13731 阅读 · 0 评论 -
(爬坑实录)Qt 在windows下的命令行参数传递json字符串遇到的问题
Qt 在windows下的命令行参数传递json字符串遇到的问题记录:json字符串中的双引号会被直接干掉,导致json字符串解析失败,还有一些字符被转义了,后来查资料才知道windows命令行会对参数进行转义。Windows命令行参数的转义(dos/cmd.exe下输入双引号竖扛等特殊字符)解决办法:传入base64编码的字符串,然后在Qt程序中反编码一下。这样的话,解析的json字符串就不会有问题了。参考:Qt之Base64编解码Windows命令行参数的转义(dos/cmd.exe下输入原创 2020-07-21 15:22:20 · 969 阅读 · 0 评论 -
Qt解决部分下载的图片读取失败问题
有时候,我们用Qt的QImage获取QPixmap读取图像,或者用load去加载的时候,发现加载不了图片,有时候会遇到这种情况。原因是图像的格式和后缀名不对应(一部分不对应的图片还是可以读取的,另外一部分就无法读取)。解决方法一直接用文件读取的方法,先读成QByteArray,再用QImage::fromData QFile file("1.jpg"); file.open(QIODevice::ReadOnly); QByteArray data = file.readAll(原创 2020-07-21 15:12:53 · 2197 阅读 · 0 评论 -
利用Qt中的mingw编译Protocol buffer
下载地址:https://github.com/protocolbuffers/protobuf/releases目前最新版是Protocol Buffers v3.12.0-rc2经测试在windows上,用Qt Creator5.14.1自带的Mingw32 7.5版本编译会有错误:mingw32-make[2]: *** [CMakeFiles\libprotobuf-lite.dir\build.make:63: CMakeFiles/libprotobuf-lite.dir/E_/prot原创 2020-07-14 16:44:43 · 1081 阅读 · 2 评论 -
QDir递归删除文件夹(包括该文件夹中的文件)的简单方法
比如删除一些临时目录,该文件夹中的文件又不多的时候,该函数就派上用场了:实例代码:QDir dir("目标文件夹名");dir.removeRecursively();官方文档这样说:bool QDir::removeRecursively()Removes the directory, including all its contents.Returns true if successful, otherwise false.If a file or directory cannot原创 2020-07-11 17:26:03 · 2040 阅读 · 0 评论 -
Qt中利用QDirIterator获取目录下的所有文件
您可以使用QDirIterator一次遍历一个目录。它类似于QDir::entryList()和QDir::entryInfoList(),但因为它一次只列出一个条目,而不是一次列出所有条目,它的扩展性更好,更适合大目录。之前我们看到很多用递归的方式进行遍历的,用迭代器方法的效率用法一:列举全部文件(不包含链接) QString path = "目标路径"; QDirIterator iter(path, QDir::Files | QDir::NoS原创 2020-07-11 17:14:55 · 5621 阅读 · 0 评论 -
Qt Remote Object(QtRO)解决找不到rep_xx_source.h或rep_xx_replica.h的终极方法
手动生成rep_xx_source.h或rep_xx_replica.h的方法repc命令的位置和参数手动生成rep_XX_replica.h手动生成rep_XX_source.h在用的时候,发现一些问题,我的Qt Creator版本是5.14.1,在使用Qt Remote Object(QtRO),发现几个影响rep_xx_source.h或rep_xx_replica.h生成的问题。关于.rep书写的格式,参照官方文档:Qt Remote Objects CompilerREPC_REPLICA原创 2020-07-10 16:16:27 · 1301 阅读 · 0 评论 -
Qt Remote Object(QtRO)实现进程间通信——遥控小车(二)
还是先看看运行效果:这次我们再Rep文件中使用枚举class CommonInterface{ ENUM CarOperation { Accelerate, Decelerate, TurnLeft, TurnRight } SIGNAL(sigMessage(CarOperation operation)) //server下发消息给client}如果你用的Qt版本是5.9的话,这里可能会有问题,我原创 2020-07-05 18:08:02 · 941 阅读 · 0 评论 -
Qt Remote Object(QtRO)实现进程间通信——遥控小车(一)
Q-Bus的官方例子是个遥控小车在windows上自己手动编译了dbus,但还是跑不起来,在搜索Qt进程通信方式的时候,无意中看到Qt Remote Object(QtRO),这种方式支持跨进程的信号与槽,就尝试着用QtRO来改造这个遥控小车,让它跑起来。看看我们的运行效果:最后发现用QtRO其实更好用,前提是你的Qt版本是5.9及以上,如果不是的话,考虑用QLocalSocket和QLocalServer来实现(同一台电脑,如果是不同电脑,就用QTcpServer和QTcpSocket来实现,或转载 2020-07-05 11:49:09 · 2790 阅读 · 5 评论 -
Qt的事件传递过程和事件过滤器的示例
每个程序main ()函数的最后都会调用QApplication类的exec()函数,它会使应用程序进入事件循环,这样就可以使应用程序在运行时接收发生的各种事件。一旦有事件发生,Qt便会构建一个相应的QEvent子类的对象来表示它,然后将它传递给相应的QObject对象或者其子类对象。举例一:新建Qt Widget应用,项目名为myevent,基类选择QWidget,类名保持Widget不变。第一步:添加一个MyLineEdit类,头文件为mylineedit.h,源文件为mylineedit.cp原创 2020-06-13 15:26:22 · 844 阅读 · 5 评论 -
更改QLineInput等文本输入框的placeholder文字颜色
行文本输入框的时候,发现预设的文字颜色没法改,默认是浅灰色的(具体颜色待查),想改变QLineInput的placeholder文字,发现qss没有相应属性。用调色板可以解决问题,Qt5.12及以上才能这样用,先看效果:为了演示效果,只在界面上放了一个QLineEdit控件Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget){ ui->setupUi(this); QL原创 2020-06-12 13:51:20 · 7372 阅读 · 3 评论 -
(爬坑实录)解决QPushbutton 点击弹出popup后,从hover状态恢复到普通状态的问题
和这篇文章遇到的问题极其相似解决Qt qpushbutton stylesheet hover但是按照这篇文章的解决方法并不能解决我的问题,我是按照自己的方法解决的。一、问题描述:用qss设置了鼠标的几种状态,分别是正常状态、hover状态和pressed状态。点击按钮后,在按钮下方弹出一个自定义的Widget,这个继承自widget类的构造函数中设置了窗口的属性setWindowFlags(Qt::Popup | Qt::FrameLessWindowHint)问题出现了,点击这个按钮后,原创 2020-06-10 18:20:32 · 3330 阅读 · 9 评论 -
Qt全局热键之使用QxtGlobalShortcut实现
全局热键,我们普遍关心的三个问题检测快捷键是否被占用注册(反注册)快捷键快捷键被触发目前有两个的多平台(windows、linux和mac平台)上能用较稳定的开源库QxtGlobalShortcut(Qt5版本是QxtGlobalShortcut5)和QHotkey本文就介绍QxtGlobalShortcut在Qt5中的应用,看看最简单使用步骤和例子:三步曲:首先是下载htt...原创 2020-05-07 11:52:30 · 4609 阅读 · 2 评论 -
Qt工作笔记-对connect的第五个参数的研究
本程序配合了QObject::sender,关于QObject::sender在下面这个链接中:https://blog.youkuaiyun.com/qq78442761/article/details/81916570程序源码如下:widget.h#ifndef WIDGET_H#define WIDGET_H #include <QWidget> class Worker;...转载 2020-05-05 22:05:55 · 336 阅读 · 0 评论 -
Qt信号与槽实现原理
有网友抱怨:哪个大牛能帮帮我,讲解一下信号槽机制的底层实现?不要那种源码的解析,只要清楚的讲讲是怎么发送信号,怎么去选择相应的槽,再做出反应。也就是类似于一个信号槽的相应流程。。。求解啊!!!看了源码,真的是一头雾水。。。撞墙的心都有了~~~~本文使用 ISO C++ 一步一步实现了一个极度简化的信号与槽的系统 (整个程序4个文件共121行代码) 。希望能有助于刚进入Qt世界的C++用...转载 2020-05-05 21:47:34 · 358 阅读 · 0 评论 -
Qt的属性动画和串行动画组结合的先淡入再淡出的小例子
我们先看效果:点开“开始”:蝴蝶的透明度从0.5逐渐增加到1,然后又从1逐渐减少到0.5,这样不断循环变化。点击“结束”按钮,动画停止。其实这个用属性动画QPropertyAnimation和串行动画组QSequentialAnimationGroup,以及Q_PROPERTY,一起来做,非常简单。首先我们需要一个变量,来存储图片的透明度:double m_imageOpacity;...原创 2020-05-05 16:36:19 · 977 阅读 · 3 评论 -
Qt之自定义属性Q_PROPERTY使用的一些体会
从Qt帮助文档中搜“Q_PROPERTY”可以看到: Q_PROPERTY(type name (READ getFunction [WRITE setFunction] | MEMBER memberName [(READ getFunction | WRITE setFunction)]) [RESET res...原创 2020-05-05 16:17:09 · 3847 阅读 · 0 评论 -
QObject::sender()的用法
先从官方文档开始看起: [protected] QObject *QObject::sender() constReturns a pointer to the object that sent the signal, if called in aslot activated by a signal; otherwise it returns nullptr. The pointeri...原创 2020-05-04 22:39:09 · 1072 阅读 · 0 评论 -
QMapIterator 类
QMapIterator 类 为 QMap 类 以及 QMultiMap类 提供Java风格的常亮迭代器。QMap既有java风格迭代器又有STL风格迭代器。java风格比STL风格的迭代器更高级也更容易使用;另一方面,java风格迭代器效率略低。QMapIterator<Key, T> 允许你对 QMap 或者 QMultiMap进行迭代。(所谓了迭代,说白了就是对一个 ...转载 2020-05-04 20:54:38 · 1779 阅读 · 1 评论 -
去掉QString中的任意空白符
首先有这样的一个需求,去掉QString字符串中所有的空格,空白符\n和\t,那我们该怎么快速实现呢?这个需求的一个应用场景就是,你可以把没有空格的字符串当做key,存放到map或者其他容器中。正则表达式中\s匹配任何空白字符,包括空格、制表符、换页符等等, 等价于[ \f\n\r\t\v]\f -> 匹配一个换页\n -> 匹配一个换行符\r -> 匹配一个回车符\...原创 2020-05-03 22:00:46 · 1847 阅读 · 0 评论 -
Qt中利用QMetaEnum实现枚举(enum)类型值及字符串转换
在Qt帮助文档中查Q_ENUM,Q_ENUM是自Qt 5.5引入的。可以看到:Enumerations that are declared with Q_ENUM have their QMetaEnum registered in the enclosing QMetaObject. You can also use QMetaEnum::fromType() to get the QMe...原创 2020-05-03 21:38:05 · 8370 阅读 · 0 评论 -
Qt界面focus焦点设置的一些体会
今天调试登录框的时候,发现登录框出现的时候,发现focus不在密码输入框中。就四处查焦点问题,以及tab键的焦点调转顺序。首先要感谢这篇文章:【QT】新弹窗默认无焦点给了我一个思路,我能不能在窗口show出来之后,或者show事件中知道当前的focus在哪个控件上?如果你是界面是继承自QWidget的话:void ResetPasswordDialog::showEvent(QShowEv...原创 2020-04-29 20:34:27 · 29122 阅读 · 1 评论 -
Qt QListWidget clear() 清空所有项出现的问题
有时候我们QListWidet的时候刚开始加载了很多个item,但是可能到后面要清空所有的item,重新加载。但是在调用QListWidget的clear的时候,无论调用什么方式总是会出现段错误。//方法一:ui->listWidget->clear();// 结果:出现段错误//方法二:void deleteAllSlot(){ int counter = u...转载 2020-04-29 17:32:08 · 4129 阅读 · 0 评论 -
QT之APNG插件的使用和编译
在Qt中显示gif动画中会有锯齿,为了解决在换肤过程中的显示效果,一般采用不同皮肤下,加载不同的gif动画(锯齿的地方用背景色填充),这是一种做法。最近发现APNG也可以解决动画周边锯齿的问题。APNGAPNG又叫动态PNG(Animated PNG),第1帧为标准PNG图像,剩余的动画和帧速等数据放在PNG扩展数据块里,因此只支持原版PNG的软件会正确显示第1帧。关于APNG的基本使用,...原创 2020-04-15 13:41:39 · 1729 阅读 · 1 评论 -
Qt 自定义PushButton qss不生效的问题处理
如果你的按钮类是从QPushButton继承而来,发现对它设置Qss不生效。尝试了一下网上的方法,后来直接去看了一些QPushButton中的paintEvent函数中到底做了什么,就知道怎么解决了。解决方法:加上Q_OBJECT宏重写void paintEvent(QPaintEvent *event)void 你的PushButton::paintEvent(QPaintEven...原创 2020-04-09 15:49:28 · 4424 阅读 · 0 评论 -
qt删除布局中的所有控件
最近一个项目开发,需要动态的添加/删除控件,下面记录一下方法,该方法参考了网上的方法,但是没有针对layout中嵌套layout的做处理:void deleteAllitemsOfLayout(QLayout* layout){ QLayoutItem *child; while ((child = layout->takeAt(0)) != nullptr) {...转载 2020-04-08 20:30:33 · 3514 阅读 · 1 评论 -
win10上Qt5.14.1+mingw64编译MySql5.7驱动,其他版本Qt也类似
首先是新建一个Qt工程,在pro文件中QT += sql#include <QSqlDatabase>QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); //QMYSQL是固定的db.setHostName("127.0.0.1");db.setDatabaseName("testdatabase"); //测试...原创 2020-03-23 17:05:48 · 1907 阅读 · 8 评论 -
解决QNetworkReplyImplPrivate::error: Internal problem, this method must only be called once.错误
在QNetworkReply *m_reply使用http下载文件时,如果此时的m_reply已经处于错误状态,则不要调用 m_reply->abort();或者 m_reply->close(); QNetworkAccessManager *manager = new QNetworkAccessManager(this); manager->get(QNetwor...原创 2020-03-10 12:45:31 · 3488 阅读 · 0 评论 -
QT 使用QDataStream写入QByteArray数据时遇到的坑
在做Qt的序列化和反序列化,粘包问题解决的时候,需要自己定义消息的格式。粘包问题解决后,但是发现消息中多了点东西。有问题,先打印出来看看,用QByteArray中的toHex打印16进制是比较好的做法。起因:一、起因每条消息 = 总长度 + 消息号 + 内容 QByteArray msgContent = "hello"; quint16 msgId = 1000; ...原创 2019-12-16 16:14:55 · 5987 阅读 · 1 评论 -
qt ,使用tcp/ip协议网络传输数据时,字节序转换方法
网络传输数据是需要保证字节序的正确,才能保证传输数据的准确,网络字节序一般是大端字节序。qt提供了以下两种方法来将本地字节序转换为网络字节序:方法一,使用qt提供的字节序转换函数T qFromBigEndian(const uchar * src)T qFromBigEndian(T src)T qFromLittleEndian(const uchar * src)T qFromLit...转载 2019-12-11 09:18:49 · 2441 阅读 · 0 评论 -
Qt中使用lambda表达式
新建一个工程,选择wiget,在widget.h中添加一个成员变量 int m_count = 0;在UI编辑器中添加3个按钮,添加3个按钮响应:#include "widget.h"#include "ui_widget.h"#include <QDebug>Widget::Widget(QWidget *parent) : QWidget(pare...原创 2019-11-22 11:22:09 · 722 阅读 · 0 评论 -
利用Qt的QGraphicsDropShadowEffect实现无边框窗口阴影效果
实现原理:QWidget互相嵌套, 以一个窗口QWidget作为阴影的画板, 嵌套QWidget设置阴影代码:第一步:新建一个qt工程,选择QWidget作为主界面的基类第二步, 先按照如图自己在ui界面添加一个widget, 并进行垂直布局, 布局器更名:lay_bg。详细步骤如下:拖一个Widget到ui界面上,然后选择Widget,垂直布局:这里的Layout改成lay_bg...原创 2019-10-23 11:14:01 · 4043 阅读 · 11 评论 -
QML插件扩展
转自:http://www.cnblogs.com/yanhuiw/p/4719597.html准备分两节来介绍QML扩展插件,分别为(一)基于QML文件的扩展方式(二)基于C++的插件扩展这篇先介绍基于QML的插件扩展。先介绍几个基本概念:qmldir: 用于组织自定义的QML插件,qmldir的具体写法可参考.qmltypes:qml插件的解释文件,用于QtCreator语法高亮...转载 2019-07-29 15:50:32 · 297 阅读 · 0 评论 -
QML State类型,实现状态切换,图片切换等效果(二)——默认状态和when属性设置
继续上一篇,所有基于Item的组件都有一个state属性和一个默认状态。默认状态就是空字符串(“”),包含了项目的所有初始值。import QtQuick 2.6import QtQuick.Controls 1.5ApplicationWindow { visible: true width: 640 height: 480 title: qsTr(...原创 2018-06-29 10:14:30 · 1555 阅读 · 0 评论 -
QML圆形头像(二)继承QQuickPaintedItem抗锯齿效果更好
用C++类继承QQuickPaintedItem,然后重写void paint(QPainter *painter);这样也可以实现圆形头像的效果,不需要用qml中的蒙板,而且抗锯齿效果更好。circleHead.h#ifndef CIRCLEHEAD_H#define CIRCLEHEAD_H#include <QtQuick/QQuickPaintedItem>#in...原创 2019-08-28 20:33:55 · 2484 阅读 · 0 评论 -
QStringList QString::split返回值的问题
QStringList QString::split(const QString &amp;amp;sep, SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) constSplits the string into substrings where...原创 2018-10-24 16:35:16 · 3431 阅读 · 0 评论 -
Qt 实现 Logger 日志----轻量级开源库QsLog的使用
github的下载地址:https://github.com/victronenergy/QsLog下载后,解压到非中文目录,用qt creator打开(qt5.8.0,windows平台上,亲测可用),如图:编译:(1)编译QsLogSharedLibrary,在windows平台上,会生成QsLog2.lib和QsLog2.dll(2)编译官方给的demo,log_example_s...原创 2018-10-31 12:14:47 · 9595 阅读 · 4 评论