关于QT绘图事件的学习
下面是个人在学习qt绘图事件时的一些简单的操作:
官方文件翻译:
- The QPaintDevice class is the base class of objects that can be painted on with QPainter.
- QPaintDevice类是工程中的基类它可以用QPainter绘制 QPaintDevice类是可以用QPainter绘制的对象的基类
- A paint device is an abstraction of a two-dimensional space that can be drawn on using a QPainter.
- 绘画设备是一个二维空间的抽象,可以使用QPainter绘制。
- Its default coordinate system has its origin located at the top-left position. X increases to the right and Y increases downwards. The unit is one pixel.
- 系统默认的坐标系原点是在左上方的位置,x轴指向右,y轴指向下,以象素为单位 它的默认坐标系统的原点位于左上角。X向右增加,Y向下增加。单位是一个像素
- The drawing capabilities of QPaintDevice are currently implemented by the QWidget, QImage, QPixmap, QGLPixelBuffer, QPicture, and QPrinter subclasses.
- QPaintDevice的绘图功能目前由QWidget、QImage、QPixmap、QGLPixelBuffer、QPicture和QPrinter子类决定
qt绘图命令的基本操作:
- //功能:在图纸中央绘制QT图标
- //头文件:#include
- //记得在绘制结束后销毁对象
- void Widget::paintEvent(QPaintEvent *) { QPainter painter(this);//设置一个画家 painter.setPen(Qt::blue); painter.setFont(QFont("Arial", 30)); painter.drawText(rect(), Qt::AlignCenter, "Qt"); }
- //绘制三角形边框
- QPainter p(this); QPen pen(Qt::black, 5); p.setPen(pen); p.drawPolygon(polygon);
- //填充
- QPainter p(this); p.setPen(Qt::NoPen); p.setBrush(Qt::red); p.drawPolygon(polygon);
- QColor: Qt使用QColor来表示颜色
- QColor c = QColor(red, green, blue, alpha=255);
- 其中的red, green, blue 和alpha 参数的范围是0到255
- 其中alpha 用于设置透明度 255 - 完全不透明 0 - 颜色透明
- Qt有专门的类来描述点(points),尺寸(sizes)和矩形(rectangles) QPoint – 点(x, y) QSize – 尺寸(width, height) QRect – 一个矩形,起始点和大小(x, y, width, height) QPointF/QSizeF/QRectF 浮点类型 处理一个绘图事件,只需要重写paintEvent 函数和构造
一个QPainter实例
//伪代码: class MyWidget : public QWidget
{
... protected: void paintEvent(QPaintEvent*);
void MyWidget::paintEvent(QPaintEvent *ev)
{
QPainter p(this);
...
void RectWithCircle::paintEvent(QPaintEvent *ev)
{
QPainter p(this);
p.setBrush(Qt::green);
p.drawRect(10, 10, width()-20, height()-20);
p.setBrush(Qt::yellow);
p.drawEllipse(20, 20, width()-40, height()-40);
}
绘制文字
QPainter p(this); QFont font("Helvetica"); p.setFont(font); p.drawText(20, 20, 120, 20, 0, "Hello World!"); font.setPixelSize(10); p.setFont(font); p.drawText(20, 40, 120, 20, 0, "Hello World!"); font.setPixelSize(20); p.setFont(font); p.drawText(20, 60, 120, 20, 0, "Hello World!"); QRect r; p.setPen(Qt::red); p.drawText(20, 80, 120, 20, 0, "Hello World!", &r); //qDebug() << r;
图形变换
1 QPoint rotCenter(50, 50); 2 qreal angle = 42; 3 p.save(); 4 p.translate(rotCenter); 5 p.rotate(angle); 6 p.translate(-rotCenter); 7 p.setBrush(Qt::red); 8 p.setPen(Qt::black); 9 p.drawRect(25,25, 50, 50); 10 p.restore(); 11 p.setPen(Qt::NoPen); 12 p.setBrush(QColor(80, 80, 80, 150)); 13 p.drawRect(25,25, 50, 50);
身体是1,财富·名利·是0,没有1有再多的0都没有用!!