主页 > 手机  > 

C++Qt学习(十):Qt其他技巧

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_NAMESPACE class Widget : public QWidget { Q_OBJECT public: 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 -start if(argc != 3) { return -1; } else { QString str1 = QString(argv[1]); QString str2 = QString(argv[2]); if(!str1 pare("yes") && !str2 pare("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其他技巧由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“C++Qt学习(十):Qt其他技巧