C++ Qt 学习(十):Qt 其他技巧
1. 带参数启动外部进程
- QProcess 用于启动外部进程
int QProcess::execute(const QString &program, const QStringList &arguments);QObject *parent; ... QString program = "./path/to/Qt/examples/widgets/analogclock"; QStringList arguments; arguments << "-style" << "fusion";QProcess *myProcess = new QProcess(parent); myProcess->start(program, arguments);
1.1 widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_pushButton_clicked();
private:Ui::Widget *ui;
};
#endif // WIDGET_H
1.2 widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QProcess>Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);
}Widget::~Widget() {delete ui;
}void Widget::on_pushButton_clicked() {QString exe_path = "D:/download/qt_test/build-AAA-Desktop_Qt_5_15_2_MSVC2019_32bit-Debug/debug/AAA.exe";QStringList argList;argList.append("yse");argList.append("start");QProcess p;p.execute(exe_path, argList);
}
1.3 外部进程 main.cpp
#include "widget.h"
#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);// AAA.exe -yes -startif(argc != 3) {return -1;} else {QString str1 = QString(argv[1]);QString str2 = QString(argv[2]);if(!str1.compare("yes") && !str2.compare("start")) {Widget w;w.show();return a.exec();}}return -2;
}
2. QtCreator 链接第三方库
- 在 .pro 或 .pri 文件添加 include 路径和 lib 的名字
// 头文件路径 INCLUDEPATH += ./vlc-3.0.8-win32/sdk/include// lib 名字,有多个 lib 就写多行 LIBS += LIBS += $$PWD/vlc-3.0.8-win32/sdk/lib/libvlc.lib LIBS += $$PWD/vlc-3.0.8-win32/sdk/lib/libvlccore.lib
3. windeployqt 提取 Qt 依赖库
打包应用程序到其他电脑运行,需要提取运行时所需依赖库,以某视频播放器为例
-
首先将 D:\Qt5\5.15.2\msvc2019\bin 添加进电脑系统环境变量 path 中

-
在需要打包的视频播放器 .exe 同级目录下运行 windeployqt MediaPlayer.exe

-
生成的依赖库如下图所示

-
运行 windeployqt 可能遇到如下警告
Warning:Cannot find Visual Studio installation direction, VCINSTALLDIR is not set -
解决办法:新建环境变量
VCINSTALLDIR C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC
4. VS2019 Qt win32 项目添加 x64 编译方式

5. QTranslator 实现多语言与国际化
- 解决 Qt 乱码最好的方法是使用 gt 翻译文件
- 给需要翻译的文本加上 tr, 例如
ui->label_userName->setText(tr("username")); ui->label_pwd->setText(tr("pwd")); ui->btnLogin->setText(tr("login"));
5.1 生成 ts 文件
-
.pro 文件添加 ts 文件
TRANSLATIONS = testlang.ts -
在开始菜单找到 Qt 控制台窗口,cd 到项目目录,执行如下命令生成 ts 文件

lupdate testlang.pro
5.2 生成 qm 文件
- 在开始菜单找到 Qt 语言专家,打开 ts 文件,逐个翻译


-
全部翻译结束后,保存,点击菜单:文件——发布
- 注意:点击发布时没有弹出窗口,在 pro 目录会直接生成 qm 文件
-
最后需要在项目 debug 目录下新建 lang 文件夹,并把上面生成的 qm 文件拷贝进去

5.3 具体实现

-
widget.cpp
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);ui->label_username->setText(tr("username"));ui->label_pwd->setText(tr("pwd"));ui->btnLogin->setText(tr("btnlogin")); }Widget::~Widget() {delete ui; } -
main.cpp
#include "widget.h" #include <QApplication> #include <QTranslator>int main(int argc, char *argv[]) {QApplication a(argc, argv);QTranslator *trans = new QTranslator();// 注意路径的反斜线,翻译文件加载错误将不会翻译QString qm_path = a.applicationDirPath() + "/lang/testlang.qm";trans->load(qm_path);a.installTranslator(trans);Widget w;w.show();return a.exec(); }
相关文章:
C++ Qt 学习(十):Qt 其他技巧
1. 带参数启动外部进程 QProcess 用于启动外部进程int QProcess::execute(const QString &program, const QStringList &arguments);QObject *parent; ... QString program "./path/to/Qt/examples/widgets/analogclock"; QStringList arguments; argument…...
跳台阶游戏(Python排列组合函数itertools.combinations的应用)
给定台阶总数和两种单次可跳级数,编写自定义函数,计算所有的游戏组合方案数量。 (笔记模板由python脚本于2023年11月19日 19:18:48创建,本篇笔记适合熟悉python自定义函数编写,了解排列组合知识的coder翻阅) 【学习的细节是欢悦的…...
【Python百宝箱】Python测试工具大揭秘:从单元测试到Web自动化
前言 在现代软件开发中,测试是确保代码质量和稳定性的关键步骤。Python作为一门广泛应用的编程语言,拥有丰富的测试工具和库,从单元测试到Web自动化,覆盖了多个测试层面。本文将介绍一系列Python测试工具,帮助开发者选…...
〖大前端 - 基础入门三大核心之JS篇㊵〗- DOM事件监听及onxxx的使用
说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费,如需要项目实战或者是体系化资源,文末名片加V!作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 从事过全栈研发、产品经理等工作…...
解锁潜力:创建支持Actions接口调用的高级GPTs
如何创建带有Actions接口调用的GPTs 在本篇博客中,我们将介绍如何创建一个带有Actions接口调用的GPTs ,以及如何进行配置和使用。我们将以 https://chat.openai.com/g/g-GMrQhe7ka-gptssearch 为例,演示整个过程。 Ps: 数据来源:…...
【发明专利】天洑软件再度收获六项国家发明专利授权
近日,南京天洑软件有限公司再度收获行业内六项国家发明专利授权,专利名称为:一种发电机绕组温度预警方法及装置(专利号:ZL 2022 1 1525605.3),一种CSTR系统的控制方法及装置(专利号&…...
Netty源码学习4——服务端是处理新连接的netty的reactor模式
零丶引入 在前面的源码学习中,梳理了服务端的启动,以及NioEventLoop事件循环的工作流程,并了解了Netty处理网络io重要的Channel ,ChannelHandler,ChannelPipeline。 这一篇将学习服务端是如何构建新的连接。 一丶网络包…...
8、信息打点——系统篇端口扫描CDN服务负载均衡WAF
文章目录 获取网络信息获取服务信息获取阻碍信息 获取网络信息 服务器厂商信息(阿里云?腾讯云?) 收集的原因:如果服务器架设在云上,不同厂商的一些配置信息不同。判断方法:直接在ip/域名网站搜相…...
Ant Design for Figma设计系统组件库 支持变量 非社区版
Ant Design for Figma 是基于 Ant Design 设计系统的 Figma 组件库,提供丰富的 UI 组件和交互功能,帮助设计师快速构建高质量的 Figma 设计稿。 Ant Design for Figma 继承了 Ant Design 的设计理念和风格,提供丰富的 UI 组件和交互功能&…...
k8s的高可用集群搭建,详细过程实战版
kubernetes高可用集群的搭建 前面介绍过了k8s单master节点的安装部署 今天介绍一下k8s高可用集群搭建 环境准备: vip :192.168.121.99 keeplive master01:192.168.121.153 centos7 master02:192.168.121.154 centos7 master03&a…...
【20年扬大真题】编写对数组求逆的递归算法
【20年扬大真题】 编写对数组求逆的递归算法 void swap(int* a, int* b) {int tmp *b;*b *a;*a tmp; } void Ni(int arr[],int left,int right) {if (left > right) {return;}swap(&arr[left], &arr[right]);Ni(arr, left 1, right - 1); } int main() {int ar…...
日志门面slf4j与常用的日志框架Log4j,Logback和Log4j2
slf4j 是众多日志框架接口的集合(俗称日志门面),它不负责具体的日志实现,只在编译时负责寻找合适的日志框架进行绑定,各日志框架通过扩展jar包中的适配器与slf4j建立适配 SLF4J可以和Log4j、Logback、Log4j2、JUL等日志框架配合使用,这里主要…...
使用ssh在本地环境(Windows)连接虚拟机以及其中的docker容器
配置虚拟机防火墙 防火墙的一系列操作需要root权限,默认是没有root密码的,所以首先需要设置root密码: sudo passwd root按提示完成root密码设置 切换到root账户 su root启用22端口并重启防火墙 firewall-cmd --permanent --add-port22/tc…...
没收到Win11 23H2正式版的推送怎么升级到23H2
没收到Win11 23H2正式版的推送怎么升级到23H2?用户反映自己没有收到Win11 23H2正式版的更新推送,又想升级为23H2版本。接下来小编给大家详细介绍不同的升级方法,帮助更多的用户完成Win11 23H2系统的更新,升级后就能体验到Win11 23…...
SpringBoot整合Redis使用基于注解的缓存
环境准备 注解 EnableCaching CacheConfig CacheConfig 提供了一种在类级别共享公共缓存相关设置的机制。 | 参数 | 作用 | | | — | — | — | | cacheNames | 使用在类上的默认缓存名称 | | | keyGenerator | 用于类的默认KeyGenerator的bean名称 | | | cacheManager | 自定…...
STM32:时钟树原理概要
在一般情况下只要在CubeIDE中将RCC下的高速时钟源设置成晶振,随后在时钟配置中把HCLK设置到最大频率(比如STM32F103的最高频率是72MHZ ),CubeIDE就会帮我们自动调节其它参数到合适的值。这样我们芯片就可以全速运行了。 一、时钟信…...
Python量化--诺贝尔奖获得者布莱克-斯科尔斯期权定价公式在日间交易中的应用
“我们不能让你在不了解一点期权定价基础知识的情况下离开麻省理工学院,”Andrew Lo 教授在麻省理工学院的 15.401 金融理论课上对学生们说道。虽然我还不是麻省理工学院的学生,但这句话给了我一个直觉:期权定价一定极其重要。由于像麻省理工学院毕业生这样的精英金融人士都…...
Redis 5 种基本数据类型详解
Redis 共有 5 种基本数据类型:String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zset(有序集合)。 这 5 种数据类型是直接提供给用户使用的&…...
LeetCode8-字符串转换整数(atoi)
目录 1.大神解法2.我的辣鸡解法:3.整数相加的溢出判断(chaGPT代码)4.整数相乘溢出判断(chatGPT代码) 到目前为止比较简单容易理解的一个代码: 参考链接: 🔗:【8. 字符串转换整数 String to Integer (atoi) 【LeetCode 力扣官方题解】-哔哩哔哩】 1.大神解法 累乘和…...
算法分析与设计课后练习22
设W(5,7,10,12,15,18,20)和M35,使用过程SUMOFSUB找出W种使得和数等于M的全部子集并画出所生成的部分状态空间树...
构建LLM维基百科智能体:从任务规划到知识检索的工程实践
1. 项目概述:当LLM学会“查字典”,一个自主探索的维基百科智能体 最近在折腾大语言模型应用开发的朋友,可能都绕不开一个核心问题:如何让模型获取并利用那些它“不知道”的知识?比如,让它回答一个关于昨天…...
Godot AI助手插件:本地LLM集成与代码辅助开发实战
1. 项目概述:在Godot引擎中构建你的AI编程副驾 如果你是一名Godot开发者,无论是刚入门的新手还是经验丰富的老手,肯定都经历过这样的时刻:面对一个复杂的游戏逻辑卡壳,或者想优化一段冗长的代码却无从下手,…...
别只盯着硬件!用Python/C#玩转ZLG、创芯CAN盒的二次开发实战
别只盯着硬件!用Python/C#玩转ZLG、创芯CAN盒的二次开发实战 在汽车电子和工业控制领域,CAN总线技术早已成为设备间通信的基石。然而许多工程师在购买了ZLG USBCAN-II或创芯CANalyst-II这类高性价比国产CAN分析仪后,往往止步于厂商提供的图形…...
Phi-4多模态AI模型:15B参数实现高效视觉推理
1. 模型定位与技术背景Phi-4-reasoning-vision-15B是当前多模态AI领域最具突破性的开源模型之一,其核心创新在于将语言模型的逻辑推理能力与视觉理解能力深度融合。不同于传统视觉语言模型仅实现简单的图文匹配,该模型在复杂视觉推理任务(如图…...
Visual Studio AI编码伴侣:无缝集成Claude Code等主流AI助手
1. 项目概述:一个为Visual Studio量身打造的AI编码伴侣 如果你和我一样,每天大部分时间都泡在Visual Studio里,与C#、C或者.NET项目打交道,那你肯定对“效率”这两个字有执念。从代码补全、重构建议到调试辅助,任何能…...
TMS320C672x DSP外部中断机制与dMax引擎应用
1. TMS320C672x外部中断架构解析在嵌入式实时系统中,外部中断是实现设备与外界事件交互的核心机制。与传统微控制器不同,TMS320C672x系列DSP采用了一种创新性的中断处理架构——通过dMax(Direct Memory Access Accelerator)引擎间…...
OpenPicoRTOS:ARM Cortex-M微控制器上的极简实时操作系统设计与实战
1. 项目概述:一个为微控制器而生的实时操作系统如果你在嵌入式领域摸爬滚打过几年,尤其是在资源极其受限的微控制器(MCU)上开发过复杂应用,那你一定对“实时性”和“资源占用”这对矛盾深有体会。商业RTOS(…...
实测对比:用Python+Azure语音服务做个桌面小工具,通义灵码和Claude3谁更省心?
PythonAzure语音服务实战:通义灵码与Claude3在桌面工具开发中的深度对比 最近在开发者社区里,关于AI编程助手的讨论越来越热烈。作为一个经常需要快速实现原型工具的Python开发者,我决定亲自测试两款热门AI编程助手——通义灵码和Claude3&…...
DM644x嵌入式Linux系统构建与优化实战
1. DM644x嵌入式Linux系统构建概述DM644x系列处理器是德州仪器(TI)推出的多媒体处理芯片,采用ARMDSP双核架构,广泛应用于视频监控、工业控制等领域。构建嵌入式Linux系统需要三个核心组件:引导程序(u-boot)、定制化Linux内核和根文件系统。与…...
年会活动背景设计:将核心信息精准置入安全区
🎉 年会活动背景设计:将核心信息精准置入安全区一场令人印象深刻的年会或活动,其视觉门面——背景板——至关重要。它不仅是合影的华丽幕布,更是信息高效传达的第一阵地。如何将主标题、副标题、时间、地点这些不可或缺的要素&…...
