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字符串时应该先转换一下

 

在源码中要写入非英文字符的话建议使用转义的方式,也就是上面“xE4xBD...”这种,这也是官方推荐的方式
*/

 

原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/15012204.html