zoukankan      html  css  js  c++  java
  • 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...”这种,这也是官方推荐的方式
    */

     

  • 相关阅读:
    给有C或C++基础的Python入门 :Python Crash Course 4 操作列表 4.4 -- 4.5
    给有C或C++基础的Python入门 :Python Crash Course 4 操作列表 4.1--4.3
    因数表进阶:1--x的因数和
    【python】接口自动化初识第三站
    【python】接口自动化初识第二站
    【python】接口自动化初识第一站
    【pycharm】无法自动补齐代码
    【python】UI自动化框架搭建
    【jmeter】B接口通过正则表达式引用A接口的参数
    测试流程测试方法
  • 原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/15012204.html
Copyright © 2011-2022 走看看