当前位置: 首页 > article >正文

Qt_笔记

1.事件举例按键事件使用包含QKeyEvent头文件。h文件里声明cpp重写虚函数void keyPressEvent(QKeyEvent *k)即可。事件的名称和获取事件的函数等细节可以在帮助里查找。2.TCP网络需要在pro文件里第一行添加一个库名network。要包含头文件QTcpSocket 和QHostAddress(需要把IP地址转换为该类型)如果是服务器还要额外包含一个库QTcpServer。客户端使用QTcpSocket 创建一个socket对象函数connectToHost连接。连接成功/连接断开会发出信号connect到一个槽函数或lambda。当QTcpSocket对象成功连接到服务器后只要有数据到达并可读就会触发 QTcpSocket::readyRead信号connect到读的槽函数即可。服务端创建一个QTcpServer对象调用listen函数进行监听。客户端发起连接时会发出信号QTcpServer::newConnection然后在槽里使用QTcpServer::nextPendingConnection()会返回一个QTcpSocket对象该QTcpSocket对象已经进行了连接。使用QTcpSocket::write函数来写。QTcpSocket::readAll来读。读写的格式是QByteArray(普通c是char *格式)。QByteArray是Utf-8编码而QString是Unicode编码所以QByteArray和QString相互转化的方法为QString::toUtf8和QString::fromUtf8。槽函数中可以使用sender()函数返回信号的发生者的指针要接收的话需要强转。3.ui文件外控制该ui使用signal: 关键字自定义信号然后使用connect绑定信号与ui内部的槽函数可以使用参数传递信息。自定义信号不需要函数的实现发出时使用emit 函数即可。4.qt中嵌入qml的方法// 在 QQuickView 或 QQmlApplicationEngine 中加载 QML 文件 QQuickView *view new QQuickView; view-setSource(QUrl(./qrc/battery.qml));5. qt设置控件的背景图片的两种常用方法1样式表qss设置border-image可以代码中用 控件-setStyleSheet() 集成也可以写在qss文件中然后代码中用set加载qss文件。//感觉border-image比background-image好用background-image有时候设置之后无效 ui-KongJianName-setStyleSheet(border-imageurl(:/...); padding:0px 0px;); //要设置padding不然有时候无法正常显示如果将qss写到单独的qss文件中可以用过以下方式读取qss然后进行设置QFile style(/usr/test/milliin/qss/QTabWidget.qss); if(style.open(QFile::ReadOnly)) { QString styleString QString::fromUtf8(style.readAll()); ui-KongJianName-setStyleSheet(styleString); style.close(); }2设置Pixmapui-KongJianName-setPixmap(QPixmap(.../path).scaled(ui-KongJianName-size(), Qt::IgnoreAspectRadio, Qt::SmoothTransformation));6.QState状态机代码示例h:#ifndef STATEDEMO_H #define STATEDEMO_H #include QWidget #include QState #include QStateMachine #include QHistoryState #include QFinalState #include QTimer QT_BEGIN_NAMESPACE namespace Ui { class StateDemo; } QT_END_NAMESPACE class StateDemo : public QWidget { Q_OBJECT public: StateDemo(QWidget *parent nullptr); ~StateDemo(); private: Ui::StateDemo *ui; }; #endif // STATEDEMO_Hcpp:#include StateDemo.h #include ui_StateDemo.h StateDemo::StateDemo(QWidget *parent) : QWidget(parent) , ui(new Ui::StateDemo) { ui-setupUi(this); //创建状态机 QStateMachine *machine new QStateMachine(this); //创建状态 QState *idleState new QState(machine); QState *workState new QState(machine); QState *pauseState new QState(machine); //创建结束状态 QFinalState *finalState new QFinalState(machine); //创建workState的子状态 QState *step1 new QState(workState); QState *step2 new QState(workState); //设置子状态初始状态 workState-setInitialState(step1); //创建历史状态 记住工作状态最后一个子状态 QHistoryState *historyState new QHistoryState(workState); //设置状态转换 idleState-addTransition(ui-workBtn, QPushButton::clicked, workState); //语法有点像connect workState-addTransition(ui-pauseBtn, QPushButton::clicked, pauseState); pauseState-addTransition(ui-workBtn, QPushButton::clicked, historyState); QTimer* timer1 new QTimer(step1); timer1-setInterval(1000); timer1-setSingleShot(true); connect(step1, QState::entered, timer1, QOverload::of(QTimer::start)); //由于start有多个重载函数所以这里要用 QOverload参数::of() 来指定 step1-addTransition(timer1, QTimer::timeout, step2); QTimer* timer2 new QTimer(step2); timer2-setInterval(1000); timer2-setSingleShot(true); connect(step2, QState::entered, timer2, QOverload::of(QTimer::start)); //由于start有多个重载函数所以这里要用 QOverload参数::of() 来指定 step2-addTransition(timer2, QTimer::timeout, step1); //设置状态机初始状态 machine-setInitialState(idleState); machine-start(); //连接状态进入信号来更新界面 connect(idleState, QState::entered, [this]{ ui-label_state-setText(状态空闲); }); connect(workState, QState::entered, [this] { ui-label_state-setText(状态: 工作中); }); connect(pauseState, QState::entered, [this] { ui-label_state-setText(状态: 已暂停); }); connect(step1, QState::entered, [this] { ui-label_state-setText(状态: 工作中 - 步骤1); }); connect(step2, QState::entered, [this] { ui-label_state-setText(状态: 工作中 - 步骤2); }); connect(finalState, QState::entered, [this] { ui-label_state-setText(状态: 完成); }); connect(machine, QStateMachine::finished, [this]{ ui-label_state-setText(状态: 状态机结束); }); } StateDemo::~StateDemo() { delete ui; }7.添加新的Widget类从Qt设计师界面类添加一个Widget类即可8.字符串数据解析(QString和QTextStream)1QString::split用于将包含分隔符如逗号、空格、制表符的字符串分割成多个部分。QString data Apple,Banana,Cherry,Date; QStringList fruits data.split(,); // fruits: [Apple, Banana, Cherry, Date] // 处理更复杂的分隔符可以使用正则表达式 QString complexData One|Two;Three Four; QStringList parts complexData.split(QRegExp([|; ])); // 使用 | ; 或空格 分割 // parts: [One, Two, Three, Four]2截取部分字符串 QString::mid, QString::left, QString::right, QString::sectionQString fixedFormat NAME:John Doe AGE:30; QString name fixedFormat.mid(5, 8); // 从位置5开始取8个字符 - John Doe QString ageStr fixedFormat.mid(15); // 从位置15开始到末尾 - 30 //left和right可以输出从字符串的左侧和右侧截取指定长度的字符 QString str Hello, World!; qDebug() str.left(5); // 输出: Hello qDebug() str.right(6); // 输出: World! //remove:删除哪几位 str.remove(0, 3); //删除前三位3查找子字符串位置QString str Hello, World!; //查找子字符串位置 int index str.indexOf(World); // 返回 7 int lastIndex str.lastIndexOf(Hello); // 返回 14 int index2 str.indexOf(o,5); //从索引5开始找 //判断是否包含 bool contains str.contains(Qt); // 返回 true //判断开头和结尾 bool startsWith str.startsWith(Hello); // true bool endsWith str.endsWith(Qt!); // true //计数出现次数 int count str.count(Hello); // 返回 23去除空白字符 QString::trimmed, QString::simplifiedQString dirtyString Hello, World! \n; QString cleanString dirtyString.trimmed(); // Hello, World! QString superClean dirtyString.simplified(); // Hello, World! (同时将内部连续空格变为一个空格)4数字与字符串转换 QString::toInt, QString::toDouble, QString::toFloat 等将字符串表示的数值转换回基本数据类型。5QTextStream 构建流对象可以从 QFile, QString, QByteArray 等构建。// 从文件构建 QFile file(data.txt); if (file.open(QIODevice::ReadOnly)) { QTextStream in(file); // ... 使用 in 读取 } // **从 QString 构建 (非常关键)** QString dataString 123 3.14 Hello; QTextStream stream(dataString, QIODevice::ReadOnly); // 将字符串本身作为数据源6 处理行 QTextStream::readLine通常用于逐行读取文件然后对每一行再进行解析。QFile file(data.csv); if (file.open(QIODevice::ReadOnly)) { QTextStream in(file); while (!in.atEnd()) { QString line in.readLine(); // 读取一行 QStringList fields line.split(,); // 处理 fields... } }7QTextStream operator流操作符 会跳过空白字符空格、换行、制表符直到找到非空白数据然后尝试将其转换为目标类型。QString line 100 3.1415926 true; QTextStream in(line); int id; double pi; bool status; in id pi status; // 自动进行字符串到类型的转换 qDebug() id; // 输出 100 qDebug() pi; // 输出 3.14159 qDebug() status; // 输出 true在读取后可以检查流的状态:QTextStream in(someString); int a, b; in a b; if (in.status() ! QTextStream::Ok) { // 处理读取错误 } in.resetStatus(); // 重置错误状态以便后续读取9.使用CMake组织代码在电脑上安装CMakewindows上安装时选择添加到系统路径然后使用QtCreator新建项目时选择cmake即可。工程文件从qmake的.pro变成了cmake的CMakeLists.txt10.文件和文件夹操作QDir和QFile的基本用法10.1 QFile创建和打开文件// 创建QFile对象 QFile file(example.txt); // 打开文件多种模式 if (file.open(QIODevice::ReadOnly)) { // 只读模式 } if (file.open(QIODevice::WriteOnly)) { // 只写模式覆盖 } if (file.open(QIODevice::ReadWrite)) { // 读写模式 } if (file.open(QIODevice::Append)) { // 追加模式 } if (file.open(QIODevice::Text)) { // 文本模式自动处理换行符 } // 常用打开模式组合 file.open(QIODevice::WriteOnly | QIODevice::Text); file.open(QIODevice::ReadWrite | QIODevice::Append);文本文件读写// 写入文本文件 QFile file(test.txt); if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { QTextStream out(file); out Hello, Qt! Qt::endl; out Line 2 Qt::endl; file.close(); } // 读取文本文件 if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream in(file); while (!in.atEnd()) { QString line in.readLine(); qDebug() line; } file.close(); } // 一次性读取 QString content; if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream in(file); content in.readAll(); file.close(); }二进制文件读写略文件操作QFile file(test.txt); // 检查文件是否存在 bool exists file.exists(); // 获取文件信息 qint64 size file.size(); QString fileName file.fileName(); // 文件重命名 bool renamed file.rename(new_name.txt); // 复制文件 bool copied QFile::copy(source.txt, destination.txt); // 删除文件 bool removed file.remove(); // 文件权限 bool isReadable file.permissions() QFile::ReadUser; bool isWritable file.permissions() QFile::WriteUser; // 设置权限 file.setPermissions(QFile::ReadOwner | QFile::WriteOwner);10.2 QDir基本操作// 创建QDir对象 QDir dir(/path/to/directory); // 检查目录是否存在 bool exists dir.exists(); // 创建目录 bool created dir.mkdir(new_directory); bool createdPath dir.mkpath(path/to/nested/directory); // 创建多级目录 // 删除目录 bool removed dir.rmdir(directory_name); bool removedPath dir.rmpath(path/to/directory); // 删除多级目录 // 获取当前目录 QString currentPath QDir::currentPath(); QString homePath QDir::homePath(); QString tempPath QDir::tempPath(); QString rootPath QDir::rootPath();QDir 其他用法略11.VSCode上编辑qt方法json配置中加上如下内容{ name: Qt, includePath: [ ${workspaceFolder}/**, D:/Qt/Qt5.14.2/5.14.2/mingw73_64/include/** //自行更改 ], defines: [ _DEBUG, UNICODE, _UNICODE ], compilerPath: D:/Qt/Qt5.14.2/Tools/mingw730_64/bin/g.exe, //自行更改 intelliSenseMode: windows-gcc-x64 }12.Qt Creator变卡windows搜索栏跳到路径 %APPDATA%\QtProject删掉QtCreator.ini即可

相关文章:

Qt_笔记

1.事件 举例:按键事件使用:包含QKeyEvent头文件。h文件里声明,cpp重写虚函数:void keyPressEvent(QKeyEvent *k)即可。事件的名称和获取事件的函数等细节可以在帮助里查找。2.TCP网络:需要在pro文件里第一行添加一个库…...

抖音无水印批量下载实战指南:3分钟搞定高效内容管理

抖音无水印批量下载实战指南:3分钟搞定高效内容管理 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support…...

从Prompt注入到训练数据投毒:生成式AI全链路隐私攻击图谱(2024最新ATTCK for AI v2.1)

第一章:从Prompt注入到训练数据投毒:生成式AI全链路隐私攻击图谱(2024最新ATT&CK for AI v2.1) 2026奇点智能技术大会(https://ml-summit.org) ATT&CK for AI v2.1(2024年9月发布)首次将生成式AI…...

VS2019 MFC TeeChart V5.1动态曲线绘制实战:从安装到高级功能封装

1. TeeChart V5.1控件安装与注册避坑指南 第一次在VS2019 MFC项目里用TeeChart V5.1时,我在注册环节就栽了跟头。明明按照网上的教程操作,却总是提示"模块已加载但调用失败"。后来才发现,64位系统下的注册有特殊姿势——必须用管理…...

W5500网络芯片初始化与状态机实战解析

1. W5500网络芯片基础介绍 第一次接触W5500这颗芯片时,我完全被它丰富的功能震撼到了。作为一款硬连线TCP/IP协议栈的网络芯片,它把复杂的网络通信简化成了几个简单的寄存器操作。想象一下,你只需要通过SPI接口发送几条命令,就能让…...

Keil调试踩坑记:Flash Timeout错误全解析(附STM32解锁教程)

Keil调试踩坑记:Flash Timeout错误全解析(附STM32解锁教程) 第一次在Keil环境下遇到"Flash Timeout.Reset the Target and try it again"这个红色错误弹窗时,我盯着屏幕愣了三秒——明明昨天还能正常下载程序&#xff0…...

ESP32-S3开发环境避坑指南:VSCode插件配置与常见错误解决

ESP32-S3开发环境避坑指南:VSCode插件配置与常见错误解决 1. 环境准备:避开Python环境冲突的雷区 在开始ESP32-S3开发前,环境配置是第一个需要跨越的门槛。许多开发者在这里遭遇的第一个拦路虎就是Python环境冲突。当你在VSCode终端看到pyt…...

别再乱调学习率了!用TensorFlow/PyTorch实战演示自适应学习率与EarlyStopping如何联手防过拟合

自适应学习率与EarlyStopping实战:让深度学习模型训练更智能 在深度学习模型训练过程中,最令人头疼的问题莫过于如何平衡训练效率与模型泛化能力。许多开发者都有过这样的经历:精心设计的模型架构,却因为学习率设置不当导致训练过…...

企业级知识图谱构建解决方案:基于LLM的智能文档结构化架构与实践

企业级知识图谱构建解决方案:基于LLM的智能文档结构化架构与实践 【免费下载链接】llm-graph-builder Neo4j graph construction from unstructured data using LLMs 项目地址: https://gitcode.com/GitHub_Trending/ll/llm-graph-builder 在数字化转型浪潮中…...

Halcon实战:基于光度立体的金属表面划痕检测

1. 光度立体法在金属表面检测中的独特优势 金属表面划痕检测一直是工业质检中的难点问题。传统方法如2D视觉检测在面对反光强烈、纹理复杂的金属表面时,往往难以准确识别细微划痕。我在实际项目中就遇到过这样的情况:一个汽车零部件厂商需要检测铝合金表…...

Redis可视化管理的终极方案:Another Redis Desktop Manager完整指南

Redis可视化管理的终极方案:Another Redis Desktop Manager完整指南 【免费下载链接】AnotherRedisDesktopManager 🚀🚀🚀A faster, better and more stable Redis desktop manager [GUI client], compatible with Linux, Windows…...

终极解决方案:如何永久保存你的微信聊天记录并生成精美年度报告

终极解决方案:如何永久保存你的微信聊天记录并生成精美年度报告 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending…...

SocialEcho技术架构深度解析:MERN全栈实战

SocialEcho技术架构深度解析:MERN全栈实战 【免费下载链接】SocialEcho Social networking platform with automated content moderation and context-based authentication system 项目地址: https://gitcode.com/gh_mirrors/so/SocialEcho SocialEcho是一个…...

开发者的第二曲线:35岁后职业图谱

当“分水岭”成为“新起点”在软件测试行业,35岁常常被描绘为一道充满焦虑的“分水岭”。当自动化工具日益普及,生成式AI开始辅助甚至编写测试脚本时,许多资深测试工程师感到传统经验的价值在流失,职业道路似乎越走越窄。然而&…...

EPC发布用于机器人和轻型电动车的5kW氮化镓三相逆变器

Efficient Power Conversion (EPC) 推出了两款基于氮化镓(GaN)技术的高功率密度三相逆变器评估板(EPC9186HC2/HC3),专为5kW级别的电机驱动设计,旨在满足机器人及轻型电动交通领域的严苛运动控制需求。该产品…...

八大网盘直链解析工具终极指南:告别下载限速的完整解决方案

八大网盘直链解析工具终极指南:告别下载限速的完整解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 /…...

LDO的实战指南:从参数解析到稳定设计

1. LDO基础:从线性稳压器到低压差设计 我第一次接触LDO是在2013年设计智能手表电源模块时。当时为了给MCU和传感器供电,需要在3.7V锂电池和3.3V系统电压之间实现高效转换。传统线性稳压器压差太大导致效率低下,而开关电源又存在电磁干扰问题&…...

django-push-notifications错误处理与调试:解决常见推送问题

django-push-notifications错误处理与调试:解决常见推送问题 【免费下载链接】django-push-notifications Send push notifications to mobile devices through GCM or APNS in Django. 项目地址: https://gitcode.com/gh_mirrors/dj/django-push-notifications …...

如何彻底掌控你的数字记忆:WeChatMsg让你的聊天数据真正属于你

如何彻底掌控你的数字记忆:WeChatMsg让你的聊天数据真正属于你 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/…...

如何用Retrieval-based-Voice-Conversion-WebUI在10分钟内打造专属AI语音模型

如何用Retrieval-based-Voice-Conversion-WebUI在10分钟内打造专属AI语音模型 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Vo…...

从数据混乱到决策清晰:2025年数据工程必备开源工具实战指南

从数据混乱到决策清晰&#xff1a;2025年数据工程必备开源工具实战指南 【免费下载链接】data-engineer-handbook This is a repo with links to everything youd ever want to learn about data engineering 项目地址: https://gitcode.com/GitHub_Trending/da/data-enginee…...

别再死记硬背了!用Arduino和ADC0804芯片,5分钟搞懂AD转换的采样保持到底在干啥

用Arduino和ADC0804芯片5分钟直观理解AD转换的采样保持原理 记得第一次在教科书上看到"采样保持电路"这个词时&#xff0c;我盯着那几张抽象的原理图看了半小时还是一头雾水。直到后来用ADC0804芯片配合Arduino做了个简单的电压测量实验&#xff0c;才突然明白那些看…...

5个实用技巧:用Supersonic开源音乐播放器打造个性化音乐体验

5个实用技巧&#xff1a;用Supersonic开源音乐播放器打造个性化音乐体验 【免费下载链接】supersonic A lightweight and full-featured cross-platform desktop client for self-hosted music servers 项目地址: https://gitcode.com/gh_mirrors/sup/supersonic Supers…...

因果效应估计:从关联到因果,AI决策的“反事实”革命

因果效应估计&#xff1a;从关联到因果&#xff0c;AI决策的“反事实”革命 引言 在大数据时代&#xff0c;我们常常陷入“相关性不等于因果性”的经典陷阱。广告点击率的提升&#xff0c;真的是营销活动的功劳吗&#xff1f;某种药物的疗效&#xff0c;在复杂的真实世界中如…...

别再乱画了!Axure RP 9/10 高效原型设计的8个核心规范(附实战避坑清单)

Axure高效原型设计的黄金法则&#xff1a;从规范到实战的进阶指南 在数字产品设计领域&#xff0c;原型就像建筑师的蓝图&#xff0c;既是创意的具象表达&#xff0c;也是团队协作的共同语言。作为从业多年的交互设计师&#xff0c;我见过太多本可以避免的"原型灾难"…...

网盘直链解析工具终极指南:八大平台高速下载完整解决方案

网盘直链解析工具终极指南&#xff1a;八大平台高速下载完整解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天…...

显卡驱动彻底清理指南:Display Driver Uninstaller(DDU)完全教程

显卡驱动彻底清理指南&#xff1a;Display Driver Uninstaller&#xff08;DDU&#xff09;完全教程 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors…...

5分钟掌握微信好友检测神器:WechatRealFriends完整使用指南

5分钟掌握微信好友检测神器&#xff1a;WechatRealFriends完整使用指南 【免费下载链接】WechatRealFriends 微信好友关系一键检测&#xff0c;基于微信ipad协议&#xff0c;看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFriend…...

ruoyi源码探秘-3 登录后端接口的架构设计与安全实践

1. RuoYi登录模块架构全景 第一次拆解RuoYi的登录模块时&#xff0c;我对着admin和system两个模块反复切换了十几次才理清调用关系。这个经典框架的登录流程设计&#xff0c;就像乐高积木一样把安全、性能、扩展性都考虑进去了。先带大家看看整体架构&#xff1a;admin模块作为…...

LX Music桌面版:免费开源的多平台音乐聚合播放器完整指南

LX Music桌面版&#xff1a;免费开源的多平台音乐聚合播放器完整指南 【免费下载链接】lx-music-desktop 一个基于 Electron 的音乐软件 项目地址: https://gitcode.com/GitHub_Trending/lx/lx-music-desktop LX Music桌面版是一款基于Electron和Vue3技术栈构建的免费开…...