Q_UNUSED() 的作用 & qt5.6.3使用QPainter的drawText画不出中文
1、Q_UNUSED() 的作用
Q_UNUSED() 没有实质性的作用,用来避免编译器警告
int testFunc(int a, int b, int c)
{
int e;
return a+b+c;
}
//编译器会有警告 e未使用;
//于是
int testFunc(int a, int b, int c)
{
int e;
Q_UNUSED(e)
return a+b+c;
}
2、 qt5.6.3使用QPainter的drawText画不出中文
void Circle::paintEvent(QPaintEvent * event)
{
//Q_UNUSED()是用来在编译时忽略函数不用的形参,这样就不会黄色报警了,当然也可以不加,就会有黄色报警
Q_UNUSED(event);
QPainter painter(this);
//设置画笔颜色
painter.setPen(QColor(0, 160, 230));
//设置字体 微软雅黑 点大小50 斜体
QFont font;
font.setFamily("Microsoft YaHei");
font.setPointSize(50);
font.setItalic(true);
painter.setFont(font);
//绘制文本
//QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); 这个版本的qt还没有setCodecForTr函数
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
//QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
painter.drawText(rect(), Qt::AlignCenter, QString("123中123文123"));
}
结果:
发现中文字都没有出来
解决1、
如果你用的是vs,那你还可以在文件最上面加上
#pragma execution_character_set("utf-8")
来解决
解决2、
把QString换成QStringLiteral
void Circle::paintEvent(QPaintEvent * event)
{
//Q_UNUSED()是用来在编译时忽略函数不用的形参,这样就不会黄色报警了,当然也可以不加,就会有黄色报警
Q_UNUSED(event);
QPainter painter(this);
//设置画笔颜色
painter.setPen(QColor(0, 160, 230));
//设置字体 微软雅黑 点大小50 斜体
QFont font;
font.setFamily("Microsoft YaHei");
font.setPointSize(50);
font.setItalic(true);
painter.setFont(font);
//绘制文本
//QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); 这个版本的qt还没有setCodecForTr函数
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
//QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
painter.drawText(rect(), Qt::AlignCenter, QStringLiteral("123中123文123"));
}
//Qt5开始只剩下setCodecForLocale这一个了,只是影响Qt对toLocal8Bit相关函数的编码方式
// Qt默认会使用本机编码,所以对于中文系统,下面这句设置是多余的
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
/*
在Qt中,QString会用UTF-16编码存储,而qDebug()等I/O函数会以UTF-8编码处理。
其实转换后的字节流是正确的,只是显示时用了和字节流不同的编码方式处理导致乱码
所以当要在Qt中输入输出非UTF-8字符串时应该先转换一下
在源码中要写入非英文字符的话建议使用转义的方式,也就是上面“\xE4\xBD...”这种,这也是官方推荐的方式
*/