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里面混合二维图形和文字的主要内容,如果未能解决你的问题,请参考以下文章