• 6462阅读
  • 6回复

【提问】清除图像 [复制链接]

上一主题 下一主题
离线gaoyu
 
只看楼主 倒序阅读 楼主  发表于: 2006-03-01
我用QPAINT打点画了函数波形,请问怎么样才能清除画出来的图像?
离线zccmin
只看该作者 1楼 发表于: 2006-03-02
看看你的波形怎么画的。
清除的话很容易,你刷新就行。
离线gaoyu
只看该作者 2楼 发表于: 2006-03-02
#include <qapplication.h>
#include <qwidget.h>
#include <qpainter.h>
#include <qpen.h>







class MyMainWindow:public QWidget
{
     public:
           MyMainWindow();
     private:
           void paintEvent(QPaintEvent *);
           QPainter *paint;
};

void MyMainWindow::paintEvent(QPaintEvent *)
{
     paint=new QPainter;
     int i=0;
     for(i=0;i<=100;i++)
     {
           paint->begin(this);
           paint->drawPoint(100, i);
           paint->end();
     }
}

MyMainWindow::MyMainWindow()
{
     setGeometry(100,100,300,100);
}

int main(int argc,char **argv)
{
     QApplication a(argc,argv);
     MyMainWindow w;
     w.show();
     return a.exec();
}

这个就是我的程序,没有什么意义,只是想测试一下打点画图,
怎么样把画上去的直线清除了?
从哪刷新啊?

谢谢了.
离线zccmin
只看该作者 3楼 发表于: 2006-03-03
你这画的是什么波形。波形总要有波浪的形状吧。
你把图形实现在paintEvent函数里是无法刷新清除的。
如果你是画在别的函数里,例如构造函数,只要在画图之后刷新就清除了。
离线obrire

只看该作者 4楼 发表于: 2006-03-26
image.fill(qRgb(255, 255, 255));
modified = true;
update();

这种代码可以清除image, 但你的调用相当于OnPaint或OnDraw,或DrawItem
所以平台的SDK会定时刷新的. 一般在10-60ms左右.

这是平台自动执行的.如果真的要清除, 就只有将painter置空了,这需要painter是global的.

还有一种方式,就是安装hook, 在调用paint message时,不处理它,或做清除处理.这好麻烦.

建议采用:

QImage newImage(newSize, QImage::Format_RGB32);
newImage.fill(qRgb(255, 255, 255));
QPainter painter(&newImage);
*image = bglImage.scaled(newSize, Qt::IgnoreAspectRatio, Qt::FastTransformation);
painter.drawImage(QPoint(0, 0), *image);

这样的绘制就比较灵活了, 可以随时清除.
离线whisper215
只看该作者 5楼 发表于: 2009-03-19
引用第4楼obrire于2006-03-26 23:16发表的  :
image.fill(qRgb(255, 255, 255));
modified = true;
update();
这种代码可以清除image, 但你的调用相当于OnPaint或OnDraw,或DrawItem
.......




555555555555555555
没懂啊………………
离线sbtree
只看该作者 6楼 发表于: 2009-03-19
在MyMainWindow类中定义一个布尔型变量,然后在需要的地方更改这个变量,再在paintEvent函数中判断该变量决定是否要画点。更改这个布尔型变量的时候,用update更新界面就可以了
windows 7 + VC++2008 + Qt4.5.2
快速回复
限100 字节
 
上一个 下一个