• 10849阅读
  • 2回复

[提问]QPainter一定要在paintevent()中才能使用吗【已解决】 [复制链接]

上一主题 下一主题
离线zooood
 
只看楼主 倒序阅读 楼主  发表于: 2011-04-15
一般是这样的,repaint()或update()--->paintevent()----->执行paintevent()中的QPainter

能不能这样,绕过update()和paintevent(),就像这个样子:我添加一个public方法,就叫draw()好了,然后把要使用QPainter的代码写入draw()里,用的时候只要外部调用xxxxx.draw()或xxxx->draw()

之所以有这样的想法,是因为我有2至3种不同的绘画操作,若使用QPainter必须经过paintevent(),那我必须把这几种不同的绘画操作都写在paintevent()里,那一旦repaint()或update()导致执行paintevent(),如何区分和选择这几种绘图操作就是个问题。当然,我完全可以在paintevent()里用诸如下面的语句对几种绘图操作加以选择,但总觉得这样别扭,因为要额外添加标记变量。
switch(xxx)
{
case 1:......break;
case 2:....beak;
.............
}
如果能绕过paintevent(),那我就只要多写几个方法:draw1()、draw2()、draw3()等等,通过外部调用不同的drawXX()来加以区别。因为这种调用是通过函数名显示区别的,看起来要舒服一点
[ 此帖被zooood在2011-04-15 10:33重新编辑 ]
离线roywillow

只看该作者 1楼 发表于: 2011-04-15
你可以将一些绘画函数独立出来,然后给它提供一个参数QPainter*,调用的时候将paintEvent中声明的painter的指针传递过去
比如
void draw1(QPainter* painter)
{
//各种绘制
}

void paintEvent(XXXX)
{
QPainter painter(this);
draw1(&painter);
//各种操作
}

区分不同情况下的绘制似乎就只有通过定义状态变量的形式来解决了,毕竟不管什么情况下都得在paintEvent中进行绘制
[ 此帖被roywillow在2011-04-15 10:21重新编辑 ]
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线zooood
只看该作者 2楼 发表于: 2011-04-15
谢谢大侠
快速回复
限100 字节
 
上一个 下一个