QT图形显示和处理4
QT还可以使用2D画图功能来显示图像,绘制文字,实现绘制路径,也可以显示gif图像,就是所谓的动画效果。这些因为和我们最后要实现的东西关系也不是很大,所以就不详细讲述了。在这里简单再说一下双缓冲机制:
双缓冲就是设置两个缓冲区,先在一个上画,画好以后直接传给另一个,然后另一个负责显示。在Opengl中,双缓冲是这样:先把内容画在一个缓冲区上,然后两个缓冲区进行交换,然后再画另一个缓冲区,然后两者再次交换。这样的好处是防止出现屏幕闪现的现象。如果用老版本的GLUT来作画,不使用双缓冲的话就会屏幕一闪一闪的,因为它需要交替显示,先清空屏幕,然后再一点一点往上面画,这就会造成很不好的视觉效果。
但是经过我的测试,Qt上的画图功能貌似不太会出现闪屏?查了查官方资料,大概是说它内部进行了优化,所以就算不自己设置双缓冲也没有什么问题。——总之,既然他们在底层替我们帮忙了,我们就偷一下懒吧,反正双缓冲也不是什么复杂的玩意,大家有需要去自己看看就可以写了,别的博客应该也有很多。
再陈述一下什么是重绘事件。如果你把窗口进行了拉伸,隐藏然后再显示,调用update函数之类的行为的时候,重绘事件就会把里面画的内容根据新的规则(比如用width()和height()指定的新的屏幕长宽比例)重新再画一遍。
再说一下这两个函数:
mc.setBackgroundRole(QPalette::Dark);
mc.setAutoFillBackground(true);
它可以用来设置控件的背景色,在重绘的时候也会生效,效果如下:
好像这一节内容有点少了。。。。
emmmmmmmm。。。。。。毕竟我是想实现关于QT绘制的学习体系的,每章节内容太少也不太好,emmmmmmm。。。。。。
还是讲讲绘制文字吧。。。。
QPainter painter(this);
QRectF rect(20.0,20.0,600.0,400.0);
painter.setPen(Qt::red);
painter.drawRect(rect);
painter.setPen(Qt::blue);
painter.drawText(20,410,tr("1"));
painter.drawText(30, 410, tr("2"));
painter.drawText(40, 410, tr("3"));
painter.drawText(50, 410, tr("4"));
painter.drawText(60, 410, tr("5"));
painter.drawText(70, 410, tr("6"));
painter.drawText(80, 410, tr("7"));
painter.drawText(90, 410, tr("8"));
painter.drawText(100, 410, tr("8"));
painter.drawText(110, 410, tr("8"));
painter.drawText(120, 410, tr("8"));
painter.drawText(rect, Qt::AlignHCenter, tr("I am a title !"));
显示效果如下:
以后我们会需要用到这个来实现坐标轴。
下一节将开始介绍图元,场景和视景等系统,这将是我们实现我们要设计的内容的根本所在。