![](https://img-blog.csdnimg.cn/025fc98dd334481fa326f95e6b1141bb.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Qt
Qt实战知识
我是唐
这个作者很懒,什么都没留下…
展开
-
Qt 博客导航
阅读目录1. Qt 指南2. 杂货铺3.界面美化4.Errors5.踩过的一些坑1. Qt 指南Qt学习指南2. 杂货铺Qt_QPushButton 简洁实现按钮长按Qt_加速编译 快速编译 make -j4Qt_编辑器配色方案Qt_pri 创建使用.pri文件Qt_本机Mac地址Qt WakeOnLAN 实现Win10远程开关机 Qt MagicPac...原创 2019-09-23 18:20:27 · 692 阅读 · 0 评论 -
QtCreator和QtDesignStudio最佳实践
Qt Design Studio 最佳实践原创 2024-07-23 14:05:29 · 648 阅读 · 0 评论 -
dbus-send和dbus-monitor命令详解
dbus-send和dbus-monitor命令详解原创 2023-07-26 18:35:42 · 3602 阅读 · 0 评论 -
Windows 搭建Syslog、RSyslog日志服务器
简述设备上的log使用syslog管理,支持将log实时发送到服务器,仅需要在设备的syslog配置文件中配置日志服务器Ip端口即可。syslog客户端 配置设备配置直接用Tcp工具开个端口接收日志就能测试设备有没有配置成功。打开rsyslog的配置文件;vim /etc/rsyslog.conf滚动到文件底部#*.* @@remote-host:514#修改为以下 意思是 使用UDP协议向192.168.1.221的514端口,实时发送日志 *.* 代表所有日志*.* @192.168原创 2022-03-16 10:58:38 · 8563 阅读 · 2 评论 -
Qt QJsonObject QString QJsonArray 互转
代码#include <QJsonObject>#include <QJsonArray>#include <QJsonDocument>QString jsonobj2String(const QJsonObject &obj){ QJsonDocument jsonDoc = QJsonDocument(obj); return jsonDoc.toJson(QJsonDocument::Compact);}QString js原创 2022-03-09 14:45:12 · 2289 阅读 · 0 评论 -
Qt QDir 递归获取文件夹中的所有文件
简述如图递归获取文件夹内所有文件和子文件代码void findAllFiles(const QString path, QFileInfoList &fileInfoList){ QDir dir(path); foreach(QFileInfo info,dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs)){ qDebug()<<"dir:"<<info.filePath();原创 2022-02-22 17:22:44 · 1567 阅读 · 0 评论 -
Qt 编译完成拷贝文件 INSTALL
1.简述有时候编译的是lib工程,希望将指定的文件,比如生成的库或者配置文件,图片资源等拷贝到指定的目录。qmake提供了INSTALLS的变量,支持make install时拷贝文件2.代码pro文件qml.files+=$$PWD/Flip.qmlqml.path=$$PWD/../Bin/Plugins/$$TARGET/qmlINSTALLS += qml只写这个是不会执行的,还需要在编译完成执行make install才可。再做一个设置这个时候再构建,结束之后就可以看到文原创 2022-01-28 15:34:59 · 1329 阅读 · 0 评论 -
Qt 获取qrc文件列表
获取qrc文件列表原创 2021-12-23 15:42:19 · 952 阅读 · 0 评论 -
Qt 人类可读大小 quint64字节转可读字符串 “1.1 GB“
1.代码网上各种五花八门的实现,不太好用,还是官方的很可,支持各种语言QString readableFilesize(quint64 size){ QLocale locale(QLocale::English); return locale.formattedDataSize(size,1,QLocale::DataSizeTraditionalFormat);}int main(int argc, char *argv[]){ qDebug() << r原创 2021-12-02 14:44:01 · 777 阅读 · 0 评论 -
Qt_QDbus用法
DBus介绍DBus是Linux上的一种进程间通信,通常在Linux桌面软件中比较常用,主要用法就是系统间跨应用的方法调用,信号通知。比如应用A要调用虚拟键盘,就可以发个消息让输入法软件弹出键盘。调试工具D-Feet是一个比较好的调试工具,可以很直观的帮助新手理解DBus服务的服务名、对象路径、对象接口、方法|信号。并且可以直接执行DBus提供的方法。客户端用法...原创 2021-11-11 11:00:08 · 2310 阅读 · 0 评论 -
Qt_QFileInfo几个路径函数的区别
测试代码 QFileInfo info("/home/ubuntu/testbackup/a.doc"); qDebug()<<info.fileName(); qDebug()<<info.filePath(); qDebug()<<info.absoluteFilePath(); qDebug()<<info.absolutePath(); qDebug()<<info.path(); q原创 2021-11-04 18:33:54 · 435 阅读 · 0 评论 -
Qt 读取Excel数据
目录Qt 读取Excel数据1.代码2.性能对比和优化2.1测试结果2.2测试代码 逐个单元格读取2.3测试代码 范围读取Qt 读取Excel数据1.代码拷贝代码直接用,整页读取速度较快,网上流传另一种逐个单元格读取的版本,看后边性能对比QVector<QVector<QString>> loadExcel(QString strSheetName){ if(strSheetName.contains(".xls")){//兼容老版本 strShe原创 2021-09-29 16:58:34 · 16755 阅读 · 8 评论 -
添加窗口到任务栏
以下这段程序来自于著名的任务栏网速插件程序TrafficMonitor中,可以参考思路bool CTaskBarDlg::AdjustWindowPos(){ if (this->GetSafeHwnd() == NULL || !IsWindow(this->GetSafeHwnd())) return false; CRect rcMin, rcBar, rcBarSnap; ::GetWindowRect(m_hMin, rcMin); //获得最小化窗口的区域 ::Get原创 2021-09-25 00:25:40 · 322 阅读 · 0 评论 -
Qt QLabel双击编辑接口
原创 2021-09-14 21:39:01 · 886 阅读 · 0 评论 -
Qt file not recognized: File truncated 半分钟搞定,不用浪费过多时间重新编译
qt编译错误如下E:\build-xxx-Desktop_Qt_5_7_1_MinGW_32bit-Debug\\ProtocalCodec.o:-1: error: file not recognized: File truncated某个.o文件被截断,经常发生在qt正在编译,然后点了终止,这样正在编译的就.o文件就不完整了。清除重新构建当然是可以的,不过项目较大编译比较耗时间,可以通过手动删除这个.o来解决步骤一打开编译产生的中间文件目录,选择大小排序,最小文件在前,删除这个0KB的.o文原创 2021-08-19 16:24:32 · 6414 阅读 · 7 评论 -
qDebug用法详解
文章目录1.使用方法流方式输出占位方式输出2.让qDebug支持输出自定义的结构体3.重定向qDebug的输出4.指定qDebug的输出格式输出支持的格式5.pro文件中相关配置1.使用方法流方式输出不用像std::out,需要在最后添加endl,使用更方便,支持常见类型直接输出,还支持Qt内置的数据类型输出,如QMap,QList,QVaraint等等,qt调试利器QString strText = "hello";bool bOk = true;qDebug()<< strTe原创 2021-08-19 13:53:16 · 31426 阅读 · 1 评论 -
Qt 70行代码实现控件任意拆分 选中控件水平垂直拆分 窗口分割
效果源码Demo实现思路我们需要两个接口分割控件的接口,选中一个控件,在这个控件上一分为二删除控件接口,选中一个控件,删除掉QSplitter功能比较基础,利用QSplitter我们可以实现像QtCreator编辑器随意拆分的效果先看窗口结构,绿色的是添加的控件,黑色的是拆分器QSplitter实现添加如上图,我们水平拆分绿色控件1,每一个控件需被一个Splitter装载(因为这样很方便,暂且这么实现),直接把2设置成水平拆分器,然后新建两个Splitter,分别装载选中的控件1,和原创 2021-07-12 15:56:13 · 764 阅读 · 8 评论 -
Qt 定制字体选择 QFontComBobox
1.简述qt自带的字体选择器是真的丑,里边字还显示的多,下拉列表特别宽简单自定义后,去掉了字体前面没用的图标和后边让列表巨宽的中文范例2.代码 QListWidget *pListWidget = new QListWidget(this); QFontDatabase fontData; foreach(QString strFont,fontData.families(QFontDatabase::SimplifiedChinese)){ QListW原创 2021-06-29 15:56:20 · 969 阅读 · 0 评论 -
Qt上位机 实现串口助手和网络助手
1 简述经常使用网络调试、串口调试工具,其中用的比较多的就是友善串口助手、SSCOM、网络调试助手,友善界面还算新,其他两个界面很古老了。有的没有快捷发送,有的满是广告,有的不能网络串口都支持。所以自己抽空就做个界面清爽、功能完善点的。2 功能介绍免费开源地址https://gitee.com/TANG_N/super-dt支持功能 源码跨平台,win、linux、macos可编译调试支持Tcp、Udp、串口支持快捷发送、自动循环发送、触发回复支持十六进制、显示时间戳、波形显示支持窗口分原创 2021-06-10 16:21:02 · 13550 阅读 · 12 评论 -
Qt QSettings读写ini时 General 读不出来值
简述我有一个配置文件,其中一个组General ,怎么都读不出正确的值,全是空,但是别的组能读出来,改General2试试, 果然可以,就怀疑是不是组名称被内置了。打开QSettings的帮助文档,搜索General ,有内容,看下解释The INI file format has severe restrictions on the syntax of a key. Qt works around this by using % as an escape character in keys. I原创 2021-05-31 09:15:11 · 1967 阅读 · 0 评论 -
Qt QMenu圆角&阴影超详细 干净圆角 屏蔽原生阴影 绘制阴影
最终效果1.代码 QList<QMenu *> listMenu; //手动添加需要设置的QMenu listMenu<<ui->menu_help<<ui->menu_settings; //找出所有的子孙Menu foreach (QMenu *menu, listMenu) { CUIHelper::recursionSubMenu(menu,listMenu); //添加所有的子菜单到li原创 2021-05-18 11:55:04 · 4892 阅读 · 16 评论 -
Qt QDebug 打印自定义结构体
1.简述你还在到处这样打印结构体么?qDebug()<<"Mc info:"<<info.m_id<<info.r_id<<info.display_type<<info.topic<<info.name<<info.sname;我刚才还在这样打印结构体,不过我实在是受够了,一番折腾之后,我可以这样打印了qDebug()<<"Mc info:"<<info;2.代码我们仅需要在结构体里原创 2021-05-12 11:04:53 · 2509 阅读 · 2 评论 -
Qt TextEdit 不自动换行 取消换行
代码m_textEdit.moveCursor(QTextCursor::End);m_textEdit.insertPlainText(strCache); //在光标位置插入文本 避免appendPlainText()自动换行使用m_textEdit.appendPlainText(strText);每次追加完会自动换行,使用上边的函数,先定位光标,再将文本插入到光标位置即可避免。...原创 2021-04-09 17:20:24 · 4073 阅读 · 0 评论 -
Qt 窗口置顶 | 和取消置顶 &
代码m_mwWindow.setWindowFlags( m_mwWindow.windowFlags() | Qt::WindowStaysOnTopHint); //置顶m_mwWindow.setWindowFlags( m_mwWindow.windowFlags() & ~Qt::WindowStaysOnTopHint); //取消置顶m_mwWindow.show(); //应对置顶后窗口反而消失的问题...原创 2021-04-09 14:10:28 · 2385 阅读 · 0 评论 -
C/C++_宏定义神仙级用法 实现枚举字符串互转
简述这段代码非常巧妙,乍一看没看懂,再一看也没懂,今天终于看懂了。先简单化一下。#define XX(name) \ case LogLevel::name: \ return #name; \ break; XX(DEBUG); ...#undef XX再变形#define XX(name) case LogLevel::name: return #name; break; XX(DEBUG); ...#undef原创 2021-04-06 23:22:12 · 2387 阅读 · 0 评论 -
Qt QPushButton 解决触摸屏点击 pressed样式表无效
目录1.简述2.解决思路3.代码1.简述QPushButton{backgroud:red;}QPushButton:pressed{backgroud:gray;}Qt5.7.1 以上样式表,在Win10的触摸屏上,鼠标点击按钮会变成灰色,一切正常。但是触摸不松开,按钮一直的红色的,没有按下效果。2.解决思路翻阅文章,虽然没有找到解决办法,但是有得到一个有价值的信息,触摸事件和鼠标事件有差异。先打印按钮鼠标和触摸按下的事件有什么区别。继承QPushButton,设置接受触摸事件,重写原创 2021-03-12 22:20:26 · 6661 阅读 · 12 评论 -
Qt 实现多语言 国际化 翻译
目录翻译流程pro文件配置tr()包裹生成ts文件翻译ts文件部署翻译代码加载qm文件翻译流程Created with Raphaël 2.2.0开始pro文件指定输出的ts文件所有需要翻译的字符串用tr()包裹qtcreator->工具->语言家->更新翻译,生成*.ts文件Linguist 打开qt语言家软件,打开ts文件,填入对应翻译文本生成qm文件根据语言设定加载不同的qm文件结束pro文件配置添加需要输出的翻译文件名称,以支持中英文为例子tr()包裹需要设置翻译的字原创 2021-02-28 17:04:58 · 459 阅读 · 0 评论 -
Qt QBoxLayout QVBoxLayout QGridLayout 清空布局内widget的正确做法
1.简述有这么一个界面,楼层内包含房间,增删改查。房间列表用QWidget+QVBoxLayout布局。当刷新界面的时候就需要清空QVBoxLayout原有的房间widget。直接take(),deletechild;房间widget是没有释放的,甚至还飘在界面上。废话不多说,看下边代码删干净它。2.代码 QVBoxLayout *pVLayout = qobject_cast<QVBoxLayout *>(this->layout()); if(pVLayou原创 2020-12-24 15:48:34 · 5573 阅读 · 3 评论 -
Qt QScrollArea 用法 QScrollArea不显示 QScrollArea没铺满
文章目录1.效果2.简述3.代码1.效果我们实现一个组件铺满滚动区的效果错误效果2.简述在设计器里边用滚动区很简单,先这样然后这样就可以了。。。但是手写代码没理解的话就容易出现不显示,加了布局器没拉伸的效果。如上没铺满示例。重要的就是这个setWidgetResizable(true);文档解释这个属性用于控制滚动区域是否需要调整视图小部件的大小。如果这个属性被设置为false(默认值),滚动区域表示它的小部件的大小。不管这个属性是什么,你都可以使用widget()->res原创 2020-12-24 10:18:47 · 4488 阅读 · 3 评论 -
Qt 递归安装父控件的所有子孙控件事件过滤器 遍历安装事件过滤器
文章目录1 简述2 实现1 简述一个稀松平常的效果,点击父控件内的任意子孙控件,父控件呈现选中效果。2 实现那么怎么收到子孙控件的点击事件呢?把所有的子孙控件事件过滤器安装到父控件上。怎么安装呢?30个控件安装30次?增删控件再手动修改?NoNoNo! 递归父控件的子孙。 void recursiveInstallEventFilter(QObject *pObject) { if(pObject->children().count() > 0)原创 2020-12-03 16:37:11 · 520 阅读 · 0 评论 -
Qt_模仿siri语音动画 全平台语音动画
目录1.效果展示2.简述3.代码1.效果展示2.简述模仿一个下面的语音动画,看起来肯定得用贝塞尔曲线,先用Ps钢笔勾出来这个轮廓,研究一下变大变小是什么参数在动。一截贝塞尔曲线有三个参数,两个手柄和一个锚点,这种形状的规律是手柄1的x坐标是固定的,根据声音值的大小,手柄1的y坐标是上下浮动的,而锚点和手柄2是相同的坐标,这样就很好计算了。只有一个变量,就是手柄1跟着声音大小变就行了。但是siri每个波的周期还不是一样的,那我们就给一个随机的X偏移,这样看起来就灵动些。3.代码工程下原创 2020-11-20 10:28:09 · 1234 阅读 · 0 评论 -
Qt Qt5.15+Xcode12+BigSur macOS及iOS开发环境搭建
目录1 简述2 安装2.1 Xcode安装2.2 Qt安装1 简述Qt5.15开始就不提供个人的离线安装包了,有两种方式可以安装。本文采用在线安装方式。第一是下载源码,自己编译,地址在这https://download.qt.io/archive/qt/5.15/5.15.0/single/第二个是在线安装,登陆Qt个人账户,可以选择Qt5.9到目前最新Qt6之间的版本。估计这一个在线安装包以后版本更新不会换了,还是这个安装包搞定下载安装。只会在官网发布源码。地址在这http://download.原创 2020-11-19 11:56:20 · 4267 阅读 · 0 评论 -
Qt_解决Qt5.15 + Xcode12iOS端qmake不可用的问题
目录简述报错解决简述为了支持最新的iOS系统,原来的开发套件Qt5.7.1+Xcode10已经落后了,不能真机调试iPhoneSE2,于是升级系统到BigSur11.01+Qt5.15+Xcode12。升级之后Mac端的倒是还能正常编译,但是ios却不行,qmake就出错了,百度不到啥东西,看了看谷歌,有人在搞5.15的ios,地址贴上https://bugreports.qt.io/browse/QTBUG-86718,仅需添加几个字母即可解决点击跳转帖子报错Project ERROR: Can原创 2020-11-17 10:48:34 · 1648 阅读 · 2 评论 -
Qt 启动应用程序的3种方式
1.示例从绝对路径启动应用QDesktopServices::openUrl(QUrl(“file:///C:/Windows/System32/notepad.exe”));非阻塞方式启动应用(启动与被启动应用均能操作)QProcess *pPrecess = new QProcess(this);pPrecess->start("notepad.exe");阻塞方式启动应用 (被启动应用关闭后,启动者应用才能点击)QProcess::execute("notepad.exe")原创 2020-10-15 17:55:38 · 4002 阅读 · 0 评论 -
Qt 21行实现 十六进制字符串互转QByteArray QString Hex互转QByteArray
1.效果 QString strMsg = "01 02 1a ff010203f"; QByteArray arr = hexStr2ByteArray(strMsg); QString strText = byteArray2HexStr(arr); qDebug()<<"toByteArray:"<<arr; qDebug()<<"toString:"<<strText; //打印结果----------------原创 2020-09-28 16:51:08 · 1204 阅读 · 0 评论 -
Qt 内置的图标
1.效果QApplication::style()->standardIcon(QStyle::SP_DialogCloseButton);//构建一个QIcon原创 2020-09-22 14:23:55 · 932 阅读 · 0 评论 -
Qt QLabel实现自动换行 字符断行 自适应
1.简述遇到一个问题是QLabel显示文件名称不完整,QLabel支持的setWordWrap(); 只会根据单词断行,没有单词的就换不了;手动实现一个,可指定最多显示行数。以下分别是1,2,3行的显示效果2.测试例子 m_pLabelName = new QLabel(this); m_pLabelName->adjustSize(); QString strSrcName = "124532002156436230.34654536.png" QSt原创 2020-09-08 17:34:10 · 3807 阅读 · 1 评论 -
Qt 实现Windows系统Win10 c++音量调节
1.简述Qt原生是不支持系统音量调节的,需要用到windows的API,效果如下2.代码头文件#ifdef Q_OS_WIN bool setSysVolume(int level); int sysVolume();#endif //Q_OS_WIN源文件#ifdef Q_OS_WIN#include <windows.h>#include <mmdeviceapi.h>#include <endpointvolume.h>#i原创 2020-08-28 11:34:30 · 3810 阅读 · 34 评论 -
Qt 窗口嵌入桌面 窗口 放在桌面
1.效果当按下Win+D是,桌面干净了,只剩下了这个贴在桌面的。。。2.用法#ifdef Q_OS_WIN#include "CWindows.h"#endif伪代码{ QLabel *pLabel = new QLabel(); pLabel->setText("hello desktop"); pLabel->setGeometry(20,20,200,30); setParentDesktop(pLabel);}2.代码头文件#ifndef CWIN原创 2020-08-20 12:58:35 · 2122 阅读 · 0 评论 -
Qt 点击任意子控件,背景选中 选中背景
1.效果点击卡片内的任意元素,Label、button,卡片都会被选中。黑的效果好像不太明显,就是选中有个白色边框。2.简述卡片的两个状态就用一个QPushButton当背景,设置选中和非选中状态图就行了。正好也好做互斥。所有的控件把事件安装到this的事件过滤器中,this事件过滤器检测到点击事件就将背景选中。3.代码简单的代码示例头文件class CLamp : public QWidget{ Q_OBJECTpublic: explicit CLamp(Q原创 2020-08-20 11:18:05 · 784 阅读 · 0 评论