HOW TO 统一设置字体中文宋体,英文数据Arial字体?!

wyjam 2011-01-25 11:09:57
如题,怎么样给一串字符,如: “2011年01月25日,星期二,下午2点30分”中的中文字体设置宋体,英文与数字使用Arial字体,要统一设置!只要出现英文就用Arial,只要出现中文就用宋体. 还有是否使用粗体、字体大小。
而不是SetText();类似如下的内容:(QLabel *label = new QLabel(this);, lable->setText(strText));

<body style=" font-family:'宋体'; font-size:9pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">我是中国人</span><span style=" font-size:12px; font-family:'Arial';">I'm chinese.</span><span style="fong-family:'宋体'; font-size:12px;">我是中国人</span></p></body>
...全文
1294 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiangv 2011-01-26
  • 打赏
  • 举报
回复
QT只有单一功能,没有分开弄的。。。。根据编码逐个字符判断吧。。。不过效率。。。
wyjam 2011-01-26
  • 打赏
  • 举报
回复
呵呵,下面给出解决方法:
提升QLabel为 MyQLabel; <--控件提升!!
setText(const QString& txt)
{
QLabel::setText(parseText(txt));
}

parseText(const QString &txt) const
{
if (txt.isEmpty())
{
return QString("");
}

QString strTmp = txt;
int pos = strTmp.indexOf("<body style");
if (pos != -1)
{
return strTmp;
}

QString strHtmlTxt = QString::fromUtf8("");
QString strHearder = QString::fromUtf8("<body style=\" font-family:'宋体'; font-size:9pt; font-weight:400; font-style:normal;\"><p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">");
QString strTailer = QString::fromUtf8("</p></body>");
QString strArialSpanHeader = QString::fromUtf8("<span style=\"font-family:'Arial'; font-size:%1px; font-weight:%2;\">").arg(font_arial_size).arg(font_arial_weight);
QString strSongSpanHeader = QString::fromUtf8("<span style=\"font-family:'宋体'; font-size:%1px; font-weight:%2;\">").arg(font_song_size).arg(font_song_weight);
QString strSpanTailer = QString::fromUtf8("</span>");

strHtmlTxt = ((strTmp.at(0).toAscii() > 0) ? strArialSpanHeader : strSongSpanHeader) + QString(strTmp.at(0));

for (int cnt = 1; cnt < strTmp.length(); cnt++)
{
if ((strTmp.at(cnt-1).toAscii() > 0) == (strTmp.at(cnt).toAscii() > 0))
{
strHtmlTxt += QString(strTmp.at(cnt));
}
else
{
strHtmlTxt += strSpanTailer;
strHtmlTxt += (((strTmp.at(cnt).toAscii() > 0) ? strArialSpanHeader : strSongSpanHeader) + QString(strTmp.at(cnt)));
}
}
strHtmlTxt += strSpanTailer;
strHtmlTxt = strHearder + strHtmlTxt + strTailer;

return strHtmlTxt;
}
  • 打赏
  • 举报
回复
是不是象Word那样, 可以分别设置中文字体和西文字体?
这个貌似有难度,QT没有这个功能,要自己搞
gladstonejay 2011-01-25
  • 打赏
  • 举报
回复
自己写的时候都是每个东西都重新设计一下字体

或者你自己写个宏之类的东西

遇到LABEL这样东西的时候 调用一下
wyjam 2011-01-25
  • 打赏
  • 举报
回复
恭喜你答对了。就是要这样搞。我们是被UI给逼的。UI给出来的设计搞就是中文和英文字体是分开设置的,他们用PHOTOSHOP可以直接设置。

16,816

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧