欢迎来到轩宇的博客

回溪照轩宇,广陌临梧楸。

关于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);

 

posted @ 2019-07-27 09:57  轩宇a_a  阅读(713)  评论(0编辑  收藏  举报