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();
    }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/155557.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

当前系统并无桌面环境,或无显示器,无法显示远程桌面,您需要自行安装X11桌面环境,或者使用终端文件功能

ToDesk远程遇到的问题如上图&#xff0c;换向日葵直接黑屏&#xff1b; 问题原因 截止发文时间&#xff0c;Todesk只支持X11协议&#xff0c;没有适配最新的Wayland协议&#xff0c;所以我们需要把窗口系统调整为X11才可以。 解决方法 修改配置文件&#xff0c;关闭wayland su…

Vellum|SOP —— Vellum Constraints

目录 约束类型 Distance Along Edges&#xff08;distance&#xff09; Bend Across Triangles&#xff08;bend&#xff09; Cloth&#xff08;distance、bend&#xff09; Hair&#xff08;stretchshear、bendtwist&#xff09; String&#xff08;distance、angle&…

生成指定位数强Lucas校验伪素数-Arnault1995构造法

Arnault在1995年的论文《Constructing Carmichael Numbers which are Strong Pseudoprimes to Several Bases》提出了一种用于构造强Lucas校验伪素数的方法&#xff0c;本文将对其方法做具体的实现分析。 文章目录 1.Lucas素数测试1.1 Lucas序列1.2 Lucas定理1.3 Lucas素数测试…

Spring Cloud Netflix微服务组件-Hystrix

目录 Hystrix的主要功能 传统容错手段 超时机制 应用容错三板斧 超时机制 舱壁隔离 熔断降级 侵入式Command用法 改进版一&#xff1a;ribbon与hystrix组合 改进版二&#xff1a;feign与hystrix组合 Hystrix三态转换图 源码分析 流程图 原理流程图 核心实现流程…

MySQL 的执行原理(一)

5.1 单表访问之索引合并 我们前边说过 MySQL 在一般情况下执行一个查询时最多只会用到单个二级 索引&#xff0c;但存在有特殊情况&#xff0c;在这些特殊情况下也可能在一个查询中使用到多个二 级索引&#xff0c;MySQL 中这种使用到多个索引来完成一次查询的执行方法称之为&…

基于Android个人理财家庭收支系统uniAPP+vue -hbuiderx-微信小程序vj9n8

摘 要 个人理财APP设计的目的是为用户提供对活动信息和提醒信息管理等方面的平台。 与PC端应用程序相比&#xff0c;个人理财的设计旨在为用户提供一个个人理财信息的管理。用户可以通过APP及时收入信息和支出信息&#xff0c;并对提醒消息进行查看等。 个人理财APP是在Androi…

代码随想录算法训练营第23期day53|1143.最长公共子序列、1035.不相交的线、53. 最大子序和

目录 一、1143.最长公共子序列 二、1035.不相交的线 三、53. 最大子序和 一、1143.最长公共子序列 力扣题目链接 class Solution { public:int longestCommonSubsequence(string text1, string text2) {vector<vector<int>> dp(text1.size() 1, vector<int…

Vue 优雅的减少请求次数

文章目录 前言Java代码Vue代码改造前改造后前言 当开发一个应用程序或者网站时,我们经常需要从后端获取一些数据来展示给用户。在某些情况下,我们可能需要获取多个属性的值,而不是单独获取每个属性的值。这时,我们可以使用一次请求获取多个属性的值,以减少网络请求的次数…

吴恩达《机器学习》9-4-9-6:实现注意:展开参数、梯度检验、随机初始化

一、实现注意:展开参数 在上一个视频中&#xff0c;讨论了使用反向传播算法计算代价函数的导数。在本视频中&#xff0c;将简要介绍一个实现细节&#xff0c;即如何将参数从矩阵展开为向量。这样做是为了在高级最优化步骤中更方便地使用这些参数。 二、梯度检验 在神经网络中…

Java vo dto 使用场景

在Java中&#xff0c;VO&#xff08;Value Object&#xff09;和DTO&#xff08;Data Transfer Object&#xff09;是常用的设计模式&#xff0c;用于数据传递和封装。它们分别适用于不同的场景&#xff1a; VO&#xff08;Value Object&#xff09;&#xff1a;用于表示具有一…

【2021集创赛】IEEE杯一等奖:一种28GHz高能效Outphasing PA设计

本作品参与极术社区组织的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~活动。 团队介绍 参赛单位&#xff1a;电子科技大学 队伍名称&#xff1a;PA调得队 指导老师&#xff1a;王政 参赛队员&#xff1a;倪梦虎、杨茂旋、张振翼 总决赛奖项&#xff1a;一等奖 1.项…

Git仓库如何重置成新仓库或者仅留最终版本

Git仓库如何重置成新仓库或者仅留最终版本 1. 重置成新仓库1.1 使用orphan参数checkout全新分支1.2 重命名latest_branch为master分支 2.仅保留最终版本2.1 使用orphan参数checkout全新分支2.2 重命名latest_branch为master分支 1. 重置成新仓库 1.1 使用orphan参数checkout全…

Golang基础-面向对象篇

文章目录 struct结构体类的表示与封装类的继承多态的基本要素与实现interface空接口反射变量的内置pairreflect包解析Struct TagStruct Tag在json中的应用 struct结构体 在Go语言中&#xff0c;可以使用type 关键字来创建自定义类型&#xff0c;这对于提高代码的可读性和可维护…

掌握这个技巧,你也能成为酒店管理高手!

随着科技的迅猛发展&#xff0c;监控技术在各个领域得到了广泛应用。然而&#xff0c;传统的监控系统在面对水浸等突发事件时&#xff0c;往往无法提供有效的预警和保护。 水浸监控系统通过实时监测水位变化&#xff0c;及时发出警报&#xff0c;以帮助用户采取紧急措施&#x…

EANet:用于医学图像分割的迭代边缘注意力网络

EANet: Iterative edge attention network for medical image segmentation EANet&#xff1a;用于医学图像分割的迭代边缘注意力网络背景贡献实验方法Dynamic scale-aware context module&#xff08;动态规模感知上下文模块&#xff09;Edge attention preservation module&a…

3D格式转换工具

这里记录下自己之前做3D模型格式转换&#xff0c;包括做CAD模型格式转换辅助的一些开源仓库和工具 &#xff08;一&#xff09;转换成gltf工具 gltf作为3D界的jpg标准&#xff0c;如今已经有很多引擎对其进行了支持&#xff0c;这里单独把它列出来 1. obj转glft工具 git仓库…

深入解析Windows操作系统——概念和工具

文章目录 Windows操作系统的版本Windows NT和Windows 95基础概念和术语内核调试用户模式调试 Windows操作系统的版本 Windows NT和Windows 95 Windows NT和Windows 95之间的一些结构性差异&#xff0c;以及Windows NT优于Windows 95及其后续版本的一些方面&#xff1a; Wind…

慧择解构年轻高客市场长期价值 花旗重申“买入”评级

风险转移、资金配置、社会保障、风险管理&#xff0c;当这四大保险行业基本职能呈现在眼前&#xff0c;人们曾经的第一反应可能是&#xff0c;只有达到一定年龄和社会地位、具备一定经济实力的人群&#xff0c;才会真正严肃对待这些概念。 但是&#xff0c;无论是人均收入水平…

前端环境变量释义import.meta.env.xxx

视频教程 彻底搞懂前端环境变量使用和原理&#xff0c;超清楚_哔哩哔哩_bilibili 添加命令行参数 --modexxxxx 新建.env.xxxx文件,其中.env文件会在所有环境下生效 以VITE_开头&#xff0c;字符串无需加双引号 使用import.meta.env.VITE_xxxxx进行调用

使用pytorch利用神经网络原理进行图片的训练(持续学习中....)

1.做这件事的目的 语言只是工具,使用python训练图片数据,最终会得到.pth的训练文件,java有使用这个文件进行图片识别的工具,顺便整合,我觉得Neo4J正确率太低了,草莓都能识别成为苹果,而且速度慢,不能持续识别视频帧 2.什么是神经网络?(其实就是数学的排列组合最终得到统计结果…