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

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.lryc.cn/news/238262.html

相关文章:

  • 跳台阶游戏(Python排列组合函数itertools.combinations的应用)
  • 【Python百宝箱】Python测试工具大揭秘:从单元测试到Web自动化
  • 〖大前端 - 基础入门三大核心之JS篇㊵〗- DOM事件监听及onxxx的使用
  • 解锁潜力:创建支持Actions接口调用的高级GPTs
  • 【发明专利】天洑软件再度收获六项国家发明专利授权
  • Netty源码学习4——服务端是处理新连接的netty的reactor模式
  • 8、信息打点——系统篇端口扫描CDN服务负载均衡WAF
  • Ant Design for Figma设计系统组件库 支持变量 非社区版
  • k8s的高可用集群搭建,详细过程实战版
  • 【20年扬大真题】编写对数组求逆的递归算法
  • 日志门面slf4j与常用的日志框架Log4j,Logback和Log4j2
  • 使用ssh在本地环境(Windows)连接虚拟机以及其中的docker容器
  • 没收到Win11 23H2正式版的推送怎么升级到23H2
  • SpringBoot整合Redis使用基于注解的缓存
  • STM32:时钟树原理概要
  • Python量化--诺贝尔奖获得者布莱克-斯科尔斯期权定价公式在日间交易中的应用
  • Redis 5 种基本数据类型详解
  • LeetCode8-字符串转换整数(atoi)
  • 算法分析与设计课后练习22
  • 芯片IO口不加电阻会怎样?
  • 智慧化工园区信息化整体解决方案:PPT全53页,附下载
  • 深度学习之三(卷积神经网络--Convolutional Neural Networks,CNNs)
  • 竞赛选题 目标检测-行人车辆检测流量计数
  • 【链表的说明、方法---顺序表与链表的区别】
  • 彻底解决electron-builder安装问题与npm下载配置问题
  • 变量命名的规则与规范
  • 【开源】基于Vue和SpringBoot的服装店库存管理系统
  • 怎样用css画一个圆?
  • Minikube Mac安装使用
  • 人工智能-循环神经网络通过时间反向传播