当前位置: 代码迷 >> QT开发 >> [新人]Qt涂鸦板相关内容
  详细解决方案

[新人]Qt涂鸦板相关内容

热度:88   发布时间:2016-04-25 03:09:28.0
[新人求助]Qt涂鸦板相关内容
本帖最后由 qq_16982701 于 2014-10-24 16:24:15 编辑
一共三个问题,麻烦各位了。

void Dialog::paintEvent(QPaintEvent *)
{

      int x=startPoint.x();
      int y=startPoint.y();
      int width=endPoint.x()-x;
      int height=endPoint.y()-y;

      QPainter painter;
      painter.begin(&temppix);
      if(!isPressed)
      {
          painter.drawRect(x,y,width,height);
          pix=temppix;
      }
      painter.end();
      painter.begin(this);
      painter.drawPixmap(0,0,pix);
      painter.end();

}

1.当这样使用双缓冲绘制矩形的时候鼠标拖动的过程中不显示矩形,松开鼠标才显示矩形,这个问题如何解决?
void Dialog::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QRectF rectf = QRectF(startPoint, endPoint);
    painter.drawRect(rectf);

}

2.当这样绘制矩形的时候为什么不产生拖影?
3.第一个矩形绘制完成,当再次点击鼠标绘制第二个矩形时第一个矩形会消失,如何解决?为什么前一种代码不会出现这种问题?
------解决思路----------------------
1. 解决无拖影问题,处理鼠标press,move,up事件,调用update来触发paint
   press => 保存起始点,保存按下标示符(ispress = true )
   move  => 获取当前鼠标点,保存,然后update,在paint根据startpoint和currentpoint绘制
  up       ==> 获取最终,设置按下标示符 ispress = false

2. 解决每次paint后原先的数据就消失的问题,这种情况最简单的方法就是用一个对象集合或者表记录上一次绘制的起点和终点,然后每次 paint时候循环绘制出来,但是这性能不是一般人能接受的

不清楚你项目具体的需求是什么但是还是推荐你使用GraphicsView 框架来处理~ 当然如果要处理1,2问题使用widget和dialog还是有办法的~