QT5中文乱码解决方法

问题产生

常用设置窗口标题方式:

1
2
3
4
window.setWindowTitle("中文") 

QString title = "中文"
window.setWindowTitle(title);

使用上述方式设置窗口标题将产生乱码。

原因分析

字符编码不匹配导致乱码现象。

1
2
3
4
5
6
7
8
9
10
11
12
/* 源码版本5.12 */
void QWindowsWindow::setWindowTitle(const QString &title)
{
setWindowTitle_sys(QWindowsWindow::formatWindowTitle(title));
}

/* 源码版本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字符编码。

解决方案

1
2
3
QString::fromUtf16(u"中文");

QString::fromLocal8Bit("中文");

参考链接

  1. QT 中文乱码解决汇总(包括QString与string、char*互转乱码),by 高祥xiang.
  2. 源码分析Qt窗口标题中文乱码的问题,by Qt君.