qt里面混合二维图形和文字

Posted qianbo_insist

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt里面混合二维图形和文字相关的知识,希望对你有一定的参考价值。

qt opengl

qt本身自带非常方便得混合图形引擎。
使得一个class 从QOpenGLWidget, 和 QOpenGLFunctions继承下来,里面既可以画二维,也可以画三维,更可以混合,有两种方式画混合引擎,

方式一 opengl三维和opengl二维混合

这种方式并不是只是适合qt,mfc等等都是适合得,画完三维后切换到二维,实际上就是使用opengl得api 将视图矩阵重新归零后开始重新定义二维,再开始画,游戏也都是这么制作得,这种方式比较简单,也就不介绍了,更方便得模式是使用qt自身得混合引擎。

方式二 opengl

制作qt得Widget,从两个类下继承,就可以使用opengl得函数了

class HGLWidget : public QOpenGLWidget,protected QOpenGLFunctions

  Q_OBJECT
public:
    bool playpause = false;
    bool playstop = false;
    c_mem *v_arrFrame = NULL ;
    s_mem *v_lastFrame = NULL;
public:
    HGLWidget(QWidget* parent);
    ~HGLWidget();
;

增加一个函数,来写文字

void drawText(QPoint lb, const char* text, int fontsize, QColor clr) 
    QPainter painter(this);
    QFont font = painter.font();
    font.setPointSize(fontsize);
    painter.setFont(font);
    painter.setPen(clr);
    painter.rotate(-30);
    painter.drawText(lb, text);

现在我们可以在画完opengl后使用函数来画增加得文字部分,注意是最后两行

void HGLWidget::paintGL() 
//    return;
    if(playstop)
        return;
    
    s_mem *lastFrame = NULL;
    if(!playpause)
        lastFrame = v_arrFrame->c_mem_read();
    
    if(lastFrame!=NULL)
        v_lastFrame = lastFrame;
    
    if(v_lastFrame!=NULL)
    
//        qInfo()<<"v_lastFrame:::"<<v_lastFrame->v_pts;
        updateFrame(v_lastFrame);
        if(v_zoom == true)
        
            glEnable(GL_TEXTURE_2D);
            glBindTexture( GL_TEXTURE_2D, v_rgb_texture[0]);
            drawzoombig();
            drawzoomsma();
            glDisable(GL_TEXTURE_2D);
            drawRectangle();
        
        else
        
            glClearColor(0,0,0,1);
            glEnable(GL_TEXTURE_2D);
            glBindTexture( GL_TEXTURE_2D, v_rgb_texture[0]);
            glTexCoordPointer(2, GL_FLOAT, 0, g_vers);
            glVertexPointer(2, GL_FLOAT, 0, g_vers);
            glColor3d(1,1,1);
            glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
            glDisable(GL_TEXTURE_2D);
        
        //以下为增加写文字二维部分
        QPoint po(10,150);
        this->drawText(po,"我是qianbotesttest ",14,Qt::blue);
    

效果图:
文字加倾斜,图像按照比例缩放放到中间

这个比较简单,方便实用,感谢大家付出时间看文章。

以上是关于qt里面混合二维图形和文字的主要内容,如果未能解决你的问题,请参考以下文章

QT绘图技术paintEvent 渐变色技术

在c ++ Qt中将二维向量/二维数组显示为简单图形

QT 二维图形 原理发展及应用

用CODESOFT7怎么制作含有汉字的二维码?

Qt编程中,怎么对用ui生成的图形控件操作

怎么弄个人的二维码,就是那种可以放照片和文字的。急!