Qt学习记录
Qt学习记录
Qt6读取GBK文件
在Qt5中,有QTextCodec模块,支持各种编码设置。
// Qt5
QCoreApplication a(argc, argv);
auto desk = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
QFile file(QDir(desk).filePath("test.txt"));
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){qDebug() << file.errorString() << Qt::endl;return a.exec();
}
QTextStream in(&file);
in.setCodec(QTextCodec::codecForName("GBK"));
while (!in.atEnd()){const QString &line = in.readLine();qDebug() << line;
}
return a.exec();
Qt6后,删除了QTextCodec模块,引入了QStringConverter,其中有几个常用的编码,其他编码都不支持,目前只能结合libconv等其他库实现编码转换。但对于windows默认的GBK编码,可以换种方式实现。
// Qt6
QCoreApplication a(argc, argv);
auto desk = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
QFile file(QDir(desk).filePath("test.txt"));
if (!file.open(QIODevice::ReadOnly)){qDebug() << file.errorString() << Qt::endl;return a.exec();
}
QByteArray arr = file.readAll();
auto s = QString::fromLocal8Bit(arr);
qDebug() << s;
return a.exec();
Qt6组件语言设置
部分组件默认语言是英文,使用下面的代码语言改为跟随系统。例如QMessageBox弹框中的Ok会变成确认,Cancle会变成取消等。
QApplication app(argc, argv);
QTranslator translator;
const QString &locale = QLocale::system().name();
const QString &path = QLibraryInfo::path(QLibraryInfo::TranslationsPath);
if (!translator.load(QString("qt_%1").arg(locale), path)) {qDebug() << "load qt_" + locale + ".qm failed";
} else {QApplication::installTranslator(&translator);
}
Widget w;
w.show();
return QApplication::exec();
Qt CMake设置应用程序图标等信息
Windows .rc 文件(资源脚本文件)是用来定义和描述程序中的各种资源的文本文件。这些资源可以包括图标、光标、对话框、菜单、字符串等。.rc 文件是 Windows 应用程序开发中的重要组成部分,通常与 C 或 C++ 代码一起使用,通过资源编译器将其编译成二进制 .res 文件,并在程序中加载这些资源。
- 首先准备一个ico文件,用作应用程序图标。
- 新建c++头文件version.h,宏定义应用程序一些信息。
//
// Created by chunf on 2024/12/26.
//#ifndef VERSION_H
#define VERSION_H#define PRODUCT_ICON "resources/app.ico" // 图标,项目根目录/resources/app.ico#define FILE_VERSION 1,0,0,0 // 文件版本
#define FILE_VERSION_STR "1.0.0.0"
#define PRODUCT_VERSION 1,0,0,0 // 产品版本
#define PRODUCT_VERSION_STR "1.0.0.0"
#define COMPANY_NAME "公司名称"
#define INTERNAL_NAME "zhd.exe"
#define FILE_DESCRIPTION "职代会评测统计程序" // 文件说明
#define LEGAL_COPYRIGHT "Copyright 2024 The xxxx Company. All rights reserved." // 版权
#define ORIGINAL_FILE_NAME "demo.exe" // 原始文件名
#define PRODUCT_NAME "zdh" // 产品名称
#define ORGANIZATION_DOMAIN "https://www.qt.io/" // 域名#endif // VERSION_H
- 新建一个.rc文件
#include "winres.h" // 引入 Windows 资源文件头,包含常见的资源类型定义
#include "version.h" // 引入自定义的版本信息头文件,定义了版本、公司等常量// 图标资源定义
IDI_ICON1 ICON PRODUCT_ICON // 定义一个图标资源,使用 'PRODUCT_ICON' 作为图标的文件名// 版本信息资源定义
VS_VERSION_INFO VERSIONINFO // 定义版本信息资源块FILEVERSION FILE_VERSION // 文件版本号,引用 FILE_VERSION 宏PRODUCTVERSION PRODUCT_VERSION // 产品版本号,引用 PRODUCT_VERSION 宏FILEFLAGSMASK 0x3fL // 允许的文件标志位掩码,0x3fL 表示保留所有标志#ifdef _DEBUG // 如果是在调试模式下FILEFLAGS 0x1L // 设置调试标志位,0x1L 表示调试版本#else // 如果是发布模式FILEFLAGS 0x0L // 设置文件标志位为 0,表示发布版本#endifFILEOS 0x40004L // 操作系统类型,0x40004L 通常表示 Windows 32 位操作系统FILETYPE 0x1L // 文件类型,0x1L 表示可执行文件FILESUBTYPE 0x0L // 文件子类型,0x0L 通常表示通用子类型
BEGINBLOCK "StringFileInfo" // 定义包含文件信息字符串的块BEGINBLOCK "080404b0" // 语言/区域标识符,"080404b0" 是简体中文(中国)的标识符BEGINVALUE "CompanyName", COMPANY_NAME // 公司名称,引用 COMPANY_NAME 宏VALUE "FileDescription", "职代会评测统计程序/2517285841@qq.com" // 文件描述,描述程序用途VALUE "FileVersion", FILE_VERSION_STR // 文件版本字符串,引用 FILE_VERSION_STR 宏VALUE "InternalName", INTERNAL_NAME // 内部文件名称,引用 INTERNAL_NAME 宏VALUE "LegalCopyright", LEGAL_COPYRIGHT // 法律版权信息,引用 LEGAL_COPYRIGHT 宏VALUE "OriginalFilename", ORIGINAL_FILE_NAME // 原始文件名称,引用 ORIGINAL_FILE_NAME 宏VALUE "ProductName", PRODUCT_NAME // 产品名称,引用 PRODUCT_NAME 宏VALUE "ProductVersion", PRODUCT_VERSION_STR // 产品版本字符串,引用 PRODUCT_VERSION_STR 宏ENDENDBLOCK "VarFileInfo" // 版本信息中的可变数据块BEGINVALUE "Translation", 0x804, 1200 // 翻译信息,0x804 表示简体中文(中国),1200 为编码(通常是 UTF-8)END
END
- CMake中加入编译
add_executable(zdhmain.cpputils.hutils.cppwidget.hwidget.cppwidget.uicardconfig.hres.qrcversion.hzdh.rc
)
- 编译并查看结果
这里附上一些常用的配置项说明,更多使用可以查看微软的文档。