You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Qt Label与GUI Y轴刻度中正确显示长破折号(Em Dash)?

解决Qt中长破折号(Em Dash)显示为问号的问题

这种显示问题本质上要么是字符串编码没正确处理,要么是当前字体不支持该Unicode字符,下面分步骤给你解决方法:

1. 用可靠的Unicode方式构造长破折号

直接在代码里输入长破折号可能会因为源文件编码问题导致乱码,推荐用Unicode转义或者QChar构造,更稳妥:

  • Em Dash(标准长破折号,Unicode编码U+2014):用"\u2014"或者QString(QChar(0x2014))
  • 如果是你提到的─(En Dash,半长破折号,Unicode编码U+2013):用"\u2013"

比如给Label设置文本:

QLabel *myLabel = new QLabel(this);
// 用Unicode转义构造
myLabel->setText("\u2014");
// 或者用QChar构造
// myLabel->setText(QString(QChar(0x2014)));

2. 给控件/轴设置支持Unicode的字体

很多系统默认字体对生僻Unicode字符覆盖不全,换一个全面支持的字体就能解决问号问题,推荐这些跨平台字体:

  • Windows:Segoe UI、Arial Unicode MS
  • Linux:Noto Sans、Ubuntu Font
  • macOS:San Francisco、Helvetica Neue

给Label设置字体

QFont unicodeFont("Segoe UI");
myLabel->setFont(unicodeFont);

给图表Y轴设置标签字体(以Qt Charts为例)

如果是Qt Charts的轴,要给轴的标签单独设置字体:

QValueAxis *yAxis = new QValueAxis();
// 设置轴标签为长破折号
yAxis->setLabelFormat("\u2014");
// 设置支持Unicode的字体
QFont axisFont("Arial Unicode MS");
yAxis->setLabelsFont(axisFont);
// 把轴绑定到图表
chart->addAxis(yAxis, Qt::AlignLeft);

如果是QCustomPlot的轴,类似操作:

customPlot->yAxis->setTickLabelFont(QFont("Noto Sans"));
customPlot->yAxis->setTickLabels(QString("\u2014"));

3. 确保源文件编码正确

在Qt项目的.pro文件里添加以下配置,强制Qt用UTF-8处理源代码和字符串:

CODECFORSRC = UTF-8
CODECFORTR = UTF-8

同时,把你的源代码文件保存为UTF-8编码(Qt Creator可在「文件→编码」选项中设置)。

4. Qt Designer里的特殊处理

如果是在Designer里设置Label文本,可能会因为Designer的字体缓存或编码问题导致显示异常,建议不要直接在Designer里输入特殊字符,而是在代码里动态设置文本和字体,这样更可靠。

排查小技巧

可以先在系统的字符映射工具(Windows是「字符映射表」,macOS是「字符查看器」)里找到目标破折号,确认它的Unicode编码,然后测试用目标字体能不能正常显示这个字符——如果字体里没有这个字符,换字体就肯定能解决。

内容的提问来源于stack exchange,提问作者M.Hu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:07:56