前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >源码分析Qt窗口标题中文乱码的问题

源码分析Qt窗口标题中文乱码的问题

作者头像
Qt君
发布于 2019-07-16 06:26:55
发布于 2019-07-16 06:26:55
3.1K00
代码可运行
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程
运行总次数:0
代码可运行

设置窗口标题中文乱码现象迟迟不能解决。网上找了又找,解决方案是可以找到。但是往往是不知原因。本文从源码剖释究竟是什么回事。

1. 接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void QWidget::setWindowTitle(const QString &)

2. 常用设置窗口标题方式

  • 方式一:直接设置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
window.setWindowTitle("中文") 
  • 方式二:通过赋值设置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
QString title = "中文"
window.setWindowTitle(title);

3. 为什么会乱码?

  • 字符编码不匹配导致乱码现象。
  • 让我们看看setWindowTitle源码是怎么实现的:
  • setWindowTitle接口:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* 源码版本5.12 */
void QWindowsWindow::setWindowTitle(const QString &title)
{
    setWindowTitle_sys(QWindowsWindow::formatWindowTitle(title));
}
  • setWindowTitle_sys接口:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* 源码版本5.12 */
void QWindowsBaseWindow::setWindowTitle_sys(const QString &title)
{
    qCDebug(lcQpaWindows) << __FUNCTION__ << this << window() << title;
    SetWindowText(handle(), reinterpret_cast<const wchar_t *>(title.utf16()));
}
  • 从源码可以看出title.utf16()最终转换为utf16字符编码。

4. 解决方案

  • 使用QString::fromUtf16转换;
  • 或使用QString::fromLocal8Bit转换,这个接口需要注意的是如果系统是utf16字符编码就不会乱码。如果不是有乱码现象依然存在。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
QString::fromUtf16(u"中文");
QString::fromLocal8Bit("中文");

5. 总结

  • 中文乱码大部分原因是字符编码问题;
  • 不同系统下字符编码可能不一样;
  • Qt5版本下设置窗口标题需要utf16编码。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
彻底解决MySQL中文乱码
mysql是我们项目中非常常用的数据型数据库。但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况。下面就来介绍一下如何彻底解决数据库中文乱码情况。
Java团长
2018/08/03
3.6K0
source insight 3.5中文乱码问题解决!
大家好,今天给大家分享一个解决 source insight 3.5乱码的问题,这是之前写背景主题修改那篇文章发布后有一个粉丝提的问题,后面,我去网上找的很多资料,都没啥作用,今天我突然在网上看到另外一种方法非常有效,百分之百解决这个中文乱码的问题:
用户6280468
2022/04/18
10.9K0
source insight 3.5中文乱码问题解决!
QT(C++)连接MySQL中文乱码解决
1、QSqlDatabase对象设置UTF-8编码 QSqlDatabase db; db.exec("SET NAMES 'UTF-8'"); 2、将MySQL编码设置成UTF-8 show variables like 'character_set_%'; set character_set_client=utf-8; set character_set_connection=utf-8; set character_set_database=utf-8; set character_set_resul
静谧星空TEL
2021/04/27
3.5K0
java 汉字乱码_Java中文乱码问题
Java Source File 中Default encoding 改写成UTF-8(你所需的编码类型) 然后Update,OK确定就可以了。
全栈程序员站长
2022/09/14
7.8K0
java 汉字乱码_Java中文乱码问题
Qt读写文件(2种方式)实现详解
FileWR.h #pragma once #include <QtWidgets/QMainWindow> #include "ui_FileWR.h" class FileWR : public QMainWindow { Q_OBJECT public: FileWR(QWidget *parent = Q_NULLPTR); private: Ui::FileWRClass ui; private slots: void on_pushButton_clicked();
zls365
2020/08/19
1.3K0
Qt读写文件(2种方式)实现详解
【Qt】]Qt5中文乱码
升级到Qt5.X之后,原先解决的Qt显示中文乱码的方法突然不适用了,找了很多方式来解决这个问题 第一种: 在公司代码里看到的方法,先将对应的cpp文件用windows自带的记事本打开,另存为UTF-8格式,然后在代码中,遇到中文字符,使用QStringLiteral("中文")进行修饰 这种方式每次新建一个class就要切出去用记事本编辑一下实在麻烦,而且每个中文字符串都要用QStringLiteral来修饰,实在麻烦 后来有找到了个方法 第二种: 在头文件申明中加上 #pragma execution_c
_gongluck
2018/03/09
4K0
【Qt】]Qt5中文乱码
Mysql解决中文乱码
最近在开发过程中,使用到mysql的数据库,而在将中文数据插入到数据库的时候出现了数据乱码的问题,在网上找了很多方法,问了很多人,试了很久才发现网上有的方法是不行的,因此在此记录下,以便他人查找。
恒辉信达
2024/11/23
2080
iTerm2连接远程-中文乱码问题
ssh 到Linux 服务器上查看一些文件时,中文乱码。 
这种情况一般是终端和服务器的字符集不匹配,MacOSX下默认的是utf8字符集。
千往
2018/12/14
2.9K0
iTerm2连接远程-中文乱码问题
[Qt]中文乱码问题-1
原文链接:https://blog.csdn.net/humanking7/article/details/81292013
祥知道
2020/03/10
1.4K0
彻底解决mysql中文乱码
mysql是我们项目中非常常用的数据型数据库。但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况。下面就来介绍一下如何彻底解决数据库中文乱码情况。
全栈程序员站长
2022/08/26
3.5K0
彻底解决mysql中文乱码
JNI--解决中文乱码问题
我们定义一个native方法用来获取c/c++返回的字符串 package com.aruba.jniapplication; public class JniDemo3 { static { System.load("C:\\Users\\tyqhc\\source\\repos\\JniApplication\\x64\\Debug\\JniApplication.dll"); } public native String getChinese();
aruba
2020/07/03
1.6K0
QT 应用程序在 Windows 系统上出现中文乱码
Windows 早期采用多字节编码,的确容易出现乱码问题。随着 Windows 全面转向 Unicode 编码,多语言的支持得到完美解决,出现中文乱码的问题就很少出现。出现乱码问题一般是 GBK 编码的文件当做 utf8 编码打开,或者 utf8编码的文件当做 GBK 编码打开。这种情况也多出现在 Linux 和 Windows 之间交换文件。
云水木石
2024/01/17
6090
QT 应用程序在 Windows 系统上出现中文乱码
Web开发中的中文乱码问题
本文主要是围绕Web开发中涉及到的中文编码这一常见问题展开,包括了对字符编码基础理论的简述以及常见几种编码标准的介绍。其中包括:ASCII、ISO8859-1、Unicode、GBK。下面先对这些字符编码集进行简单的介绍。
topgunviper
2022/05/12
2K0
【VC++】字符串详解&窗口&第一个windows程序
根本原因是程序使用了标准函数,而在你的机器上,没有这个标准函数对应的动态库实现,如果想要顺利运行则需要到官方网站下载对应版本的动态库安装即可
20岁爱吃必胜客
2022/11/13
3640
【VC++】字符串详解&窗口&第一个windows程序
cmd - 命令行窗口中文乱码
在cmd窗口中输入curl www.baidu.com可以看到有中文乱码的现象,这是因为默认使用的是GBK编码。另外,curl是利用URL语法在命令行方式下工作的开源文件传输工具。它被广泛应用在Unix、多种Linux发行版中,并且有DOS和Win32、Win64下的移植版本,在win10的cmd中有内嵌curl。
雨临Lewis
2022/01/11
1.6K0
mysql操作命令梳理(4)-中文乱码问题
在平时的mysql运维操作中,经常会碰到插入中文字段后出现乱码的情况,产生中文乱码的原因一般有: 1)mysql的编码格式不对,是latin1编码。强烈推荐将mysql下的编码格式都改为utf8,因为它兼容世界上所有字符! 2)mysql的表的语系设定问题(包含character与collation) 3)客户端程式(例如php)的连线语系设定问题
全栈程序员站长
2022/07/19
1.4K0
python MYsql中文乱码
以前用php连mssqy时也经常出现中文乱码(中文变问号)的问题,那时就明白是编码没设置好导航,现在的Python连mssql数据库也同样出现这问题,问题一样,解决的办法当然也会相似,现在我们来看看解决方法。
py3study
2020/01/10
4.6K0
C++代码改造为UTF-8编码问题的总结
无论是哪个平台哪种编程语言,字符串乱码真是一个让人无语的问题:你说这个问题比较小吧,但是关键时刻来一下真是受不了。解决方式也有很多种,但是与其将编码转换来转换去,不如统一使用同一种编码方式,比如国际通用的UTF-8编码。因此,新的程序代码最好都统一使用UTF-8编码的方式。但是C++作为一种历史悠久的编程语言,肯定存在很多存量代码,如何将其改造成UTF-8编码也是一个问题,笔者在这里总结一二,可能不是很全,如果有遗漏就再开一篇补充。
charlee44
2025/02/13
1960
C++代码改造为UTF-8编码问题的总结
QPushButton && QLabel
QToolButton 类提供了一个快速访问按钮的命令或选项, 通常在 qtoolbar 中使用。有个关联action,还可以设置快捷键; QToolButton是一个特殊的Button, 提供快速访问特定的命令或选项。与普通命令按钮不同, QToolButton通常不显示文本标签, 而是显示图标。 QPushButton是常用按钮,一般可以提供文字,图标都在按钮上。可以设置一定的界面风格等。
zls365
2020/08/19
1.5K0
QPushButton && QLabel
2025年了,中文乱码的问题仍然存在
这两个问题存在一个共同现象:英文可以正常生成和解析,一旦涉及到中文便会出现乱码。基于此现象猜测原因为中文字符串编码/解码的问题。最终均引导(请允许我妄自尊大的称之为引导)读者朋友解决了相应问题。
程序员的园
2025/01/22
1180
2025年了,中文乱码的问题仍然存在
相关推荐
彻底解决MySQL中文乱码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验