问题产生
常用设置窗口标题方式:
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 4 5 6
| QString::fromUtf16(u"中文");
QString::fromLocal8Bit("中文");
// 推荐 QString str = QStringLiteral("中文文本");
|
参考链接
- QT 中文乱码解决汇总(包括QString与string、char*互转乱码),by 高祥xiang.
- 源码分析Qt窗口标题中文乱码的问题,by Qt君.