(1) Dibujo 2D detallado (QPainter)

1. Evento de dibujo de Qt
Cuando la aplicación recibe un evento de dibujo, llamará a QWidget :: paintEvent (), que es donde se dibuja la ventana.
Hay dos formas de volver a dibujar una ventana
1. update ( ): agrega el evento de redibujo a la cola de eventos

  • Las llamadas repetidas a update () se fusionarán en una por Qt
  • Sin parpadeo de la imagen
  • Puede tomar parámetros para especificar un área para volver a dibujar

2. repintado () - Genera eventos de dibujo inmediatamente.
Generalmente, este método no se recomienda.
Úselo solo en el caso de efectos especiales que requieran un nuevo dibujo inmediato.
Puede especificar un área determinada con parámetros

Dibujo básico

  • La clase QPainter proporciona operaciones de dibujo y su prototipo de constructor es:
QPainter(QPaintDevice *device);
  • QPaintDevice representa el lienzo para dibujar imágenes 2D;
  • Los siguientes objetos de clase que heredan QPaintDevice se pueden usar para dibujar QPainter
QWidget、QImage、QPixmap、QPicture、QPrinter、QSvgGenerator、
QGLPixelBuffer、QGLFrameBufferObject

Dos, Qt 2D dibujo
QPainter

  1. Las líneas y los contornos se pueden dibujar con un pincel (QPen) y rellenar con un pincel (QBrush);
  2. La fuente está definida por la clase QFont. Al dibujar texto, Qt usa los atributos de la fuente especificada. Si no hay una fuente coincidente, Qt usará la fuente más cercana;
  3. En circunstancias normales, QPainter dibuja con el sistema de coordenadas predeterminado y también puede usar la clase QMatrix para transformar las coordenadas;
  4. Al dibujar, puede usar QPainter :: RenderHint para decirle al motor de dibujo si debe abandonar la función de suavizado para suavizar el dibujo;
  5. Valores posibles de QPainter :: RenderHint :
    QPainter :: Antialiasing : Indique al motor de dibujo que realice un dibujo de suavizado de bordes si es posible
    QPainter :: TextAntialiasing : Cuando sea posible, dibujo de suavizado de texto
    QPainter :: SmoothPixmapTransform : use Transformación de mapa de píxeles suave algoritmo (algoritmo de interpolación bilineal) en lugar del algoritmo de interpolación del vecino más cercano;

Las funciones de dibujo de QPainter se resumen a continuación:

función Características función Características
drawArc () arco drawPixmap () Imagen representada por QPixmap
drawChord () cuerda drawPoint () punto
drawConvexPolygon () Polígono convexo drawPoints () Varios puntos
dibujarEllipse () oval drawPolygon Polígono
drawImage () Imagen representada por QImage drawPolyline () Polilínea
Dibujar linea() línea drawRect () rectángulo
dibujar líneas() Varias lineas drawRects () Múltiples rectángulos
dibujarPath () sendero drawRoundRect () Rectángulo redondeado
dibujar la imagen() Dibujar de acuerdo con el comando QPainter dibujarTexto () Texto
empate sector drawTiledPixmap () Imagen de mosaico
    drawLineSegments () Dibujar una polilínea

Tres, cepillo

  • Los atributos del lápiz incluyen tipo de línea, ancho de línea, color, etc. Las propiedades del pincel se pueden especificar en el constructor y también se pueden configurar usando funciones como setStyle (), setWidth (), setBrush (), setCapStyle (), setJoinStyle (), etc .;
  • Qt usa Qt :: PenStyle para definir 6 estilos de pincel. Ellos son:
    Inserte la descripción de la imagen aquí
    También puede personalizar el estilo de línea ( Qt :: CustomDashLine ), necesita usar la función ** setDashPattern () ** de QPen para configurar el estilo personalizado.
    El estilo de gorra (estilo de gorra)
  • El estilo final determina el estilo final de la línea, que solo es válido para líneas con un ancho de línea superior a 1.
  • Qt define tres estilos de punto final representados por el tipo enumerado Qt :: PenCapStyle, que son:
    Inserte la descripción de la imagen aquí
Qt :: PenCapStyle Descripción
Qt :: SquareCap Indica que la línea es cuadrada en el vértice y el área dibujada por la línea incluye el punto final y extiende la longitud de la mitad del ancho de la línea.
Qt :: FlatCap Indica que la línea es cuadrada en el vértice, pero el área de dibujo de la línea no incluye el punto final
Qt :: RoundCap Indica que la línea es redonda en el vértice y el área de dibujo de la línea incluye el punto final.

Estilo de unión

  • El estilo de conexión es cómo se conectan dos líneas El estilo de conexión es válido para líneas con un ancho de línea mayor o igual a 1;
    Qt define cuatro métodos de conexión, representados por el tipo enumerado Qt :: PenStyle.  Ellos son:
Qt :: PenStyle Descripción
Qt :: BevelJoin Se refiere a los vértices de las líneas centrales de las dos líneas que se encuentran, y la parte superior del cuadrado de la línea permanece
Qt :: MitreJoin Se refiere al punto donde los vértices de las líneas centrales de las dos líneas se encuentran, y la línea en el punto de conexión se extiende hacia el exterior de la línea y converge a un punto, formando una conexión puntiaguda.
Qt :: RoundJoin Significa que los vértices de las líneas centrales de dos líneas se encuentran y los puntos de conexión están conectados en forma de arco.

Cuatro, pincel de pintura

  1. En Qt, los gráficos se rellenan con QBrush y el pincel incluye el color y el estilo de relleno (modo de relleno).
  2. En Qt, los colores están representados por la clase QColor y QColor admite modelos de color RGB, HSV y CMYK. QColor también admite la combinación alfa de contornos y rellenos.
  3. RGB es un modelo orientado a hardware. Los colores se mezclan con tres colores primarios de rojo, verde y azul.
  4. El modelo HSV / HSL está más en línea con la percepción del color de las personas, compuesto por tono (0-359), saturación (0-255) y brillo (0-255), y se utiliza principalmente para selectores de color.
  5. CMYK se compone de cuatro colores primarios: cian, magenta, amarillo y negro. Se utiliza principalmente para equipos de copia de hardware, como impresoras. El valor de cada componente de color es 0-255.
  6. El relleno de patrón básico incluye patrones con varias combinaciones de puntos y líneas.

QColor
QColor的构造函数:QColor(int r,int g,int b,int a)
其中 参数a(alpha)是控制透明度的,取值范围为0-255;0为完全透明,255为不透明。
颜色还可以使用如下函数进行微调

QColor::lighter(int factor)
QColor::darker(int factor)

QRgb

  • QRgb类可以用于保存颜色值,可与QColor相互转换获取32-bit的RGB颜色值+alpha值。
  • 创建新颜色
QRgb orange = qRgb(255,127,0);
QRgb overlay = qRgb(255,0,0,100);
  • 获取单独某个颜色值:qRed,qGreen,qBlue,qAlpha
int red = qRed(orange);
  • 获取灰度值
int gray = qGray(orange);

模式画刷
模式化画刷构造函数QBrush(const QColor *color,Qt::BrushStyle style),具体见下图:
Inserte la descripción de la imagen aquí
五、渐变填充

  • Qt提供了渐变填充的画刷,渐变填充包括两个要素:颜色的变化和路径的变化

  • 颜色变化可以指定从一种颜色渐变到另外一种颜色。
    路径变化指在路径上指定一些点的颜色进行分段渐变。

  • Qt中,提供了三种渐变填充

    线性(QLinearGradient)
    圆形(QRadialGradient)
    圆锥渐变(QConicalGradient)
    所有的类都从QGradient类继承

  • 造渐变填充的画刷**

QBrush b** = QBrush(QRadialGradient(...));

填充设置

  • 从图形的起点到终点,以从0至1的比例渐变填充
QGradient::setColorAt(qreal pos,QColor color);
  • 完成0-1范围的填充后,后续颜色铺开的方式可以不同,通过setSpread()函数来设置

1、线性渐变填充

  • 线性渐变填充指定两个控制点,画刷在两个控制点之间进行颜色插值。
  • 通过创建QLinearGradient对象来设置画刷。
QPainter painter(this);
QLinearGradient g(0,0,100,100);
g.setColorAt(0.0,Qt::white);
g.setColorAt(1.0,Qt::blue);
painter.setBrush(g);
p.drawRect(0,0,100,100);
  • 在QGradient构造函数中指定线性填充的两点分别为(0,0),(100,100)。
  • La función setColorAt () establece el color en la posición especificada entre 0-1.

2. Relleno de degradado circular El relleno de degradado
circular debe especificar el centro, el radio y el foco.

QRadialGradient(qreal cx,qreal cy,qreal radius,qreal fx,qreal fy);
  • El pincel realiza una interpolación de color entre el punto focal y todos los puntos del círculo.
  • Crea un objeto QRadialGradient y configura el pincel
QPainter painter(this);
QRadialGradient radialGradient(50,50,50,30,30);
radialGradient.setColorAt(0.0,Qt::white);
radialGradient.setColorAt(1.0,Qt::blue);
painter.setBrush(radialGradient);
painter.drawRect(0,0,100,100);

Relleno degradado cónico

  • El relleno de degradado cónico especifica el círculo y el ángulo inicial
QConicalGradient(qreal cx,qreal cy,qreal angle);
  • El pincel interpola el color a lo largo del centro del círculo en tiempo inverso
  • Crea un objeto QConicalGradient y configura el pincel
QPainter painter(this);
QConicalGradient conicalGradient(50,50,90);
conicalGradient.setColorAt(0,Qt::white);
conicalGradient.setColorAt(1,Qt::blue);
painter.setBrush(conicalGradient);
painter.drawRect(0,0,100,100);
  • Para implementar el relleno personalizado, también puede utilizar objetos QPixmap o QImage para el relleno de textura. Dos tipos de imágenes usan las funciones setTexture () y setTextureImage () para cargar la textura respectivamente.

Supongo que te gusta

Origin blog.csdn.net/qq_40329851/article/details/113814134
Recomendado
Clasificación