class PaintedWidget : public QWidget { public : PaintedWidget(); protected : void paintEvent(QPaintEvent * event ); }; 这里我们只定义了一个构造函数,并且重定义paintEvent()函数。从名字就可以看出,这实际上是一个事件的回调函数。请注意,一般而 言,Qt的事件函数都是protected的,所以,如果你要重写事件,就需要继承这个类了。至于事件相关的东西,我们在前面的内容已经比较详细的叙述 了,这里不再赘述。 构造函数里面主要是一些大小之类的定义,这里不再详细说明: PaintedWidget::PaintedWidget() { resize(800, 600); setWindowTitle(tr( "Paint Demo" )); } 我们关心的是paintEvent()函数的实现: void PaintedWidget::paintEvent(QPaintEvent * event ) { QPainter painter( this ); painter.drawLine(80, 100, 650, 500); painter.setPen(Qt::red); painter.drawRect(10, 10, 100, 400); painter.setPen(QPen(Qt::green, 5)); painter.setBrush(Qt::blue); painter.drawEllipse(50, 150, 400, 200); } 为了把我们的程序运行起来,下面是main()函数: int main( int argc, char *argv[]) { QApplication app(argc, argv); PaintedWidget w; w.show(); return app.exec(); } 运行结果如下所示: 首先,我们声明了一个QPainter对象。注意,我们在这个函数的栈空间建立了对象,因此不需要delete。 QPainter接收一个QPaintDevice*类型的参数。QPaintDevice有很多子类,比如QImage,以及 QWidget。注意回忆一下,QPaintDevice可以理解成要在哪里去画,而现在我们希望在这个widget上画,因此传入的是this指针。 QPainter有很多以draw开头的函数,用于各种图形的绘制,比如这里的drawLine,drawRect和和drawEllipse 等。具体的参数请参阅API文档。下图给出了QPainter的draw函数的实例,本图来自C++ GUI Programming with Qt4, 2nd Edition. 好了,今天先到这里,我们将在下面一章中继续对这个paintEvent()函数进行说明。
本文出自 “豆子空间 ” 博客,请务必保留此出处http://devbean.blog.51cto.com/448512/235332