畫筆(QPen)、筆刷(QBrush)

Qt繪圖系統定義了畫筆和筆刷:

  • 畫筆QPen多用於繪製畫線或輪廓線,我們可定義樣式、連接方式和線末端的樣式。QBrush大多用於填充內部區域。
  • 筆刷QBrush多用於填充內部區域,可選擇樣式、顏色、漸層以及紋理等不同填充屬性,預設不進行任何填充(Qt::NoBrush)。

下面的圖示為各種QBrush填充樣式:

QBrush

QPen畫線樣式:

QPen


QPen筆帽樣式capStyle()定義了線的末端:

QPen


QPen連接樣式joinStyle()定義了兩條線如何連接起來:

QPen


widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPainter>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
protected:
    void paintEvent(QPaintEvent *);
};

#endif 

widget.cpp

#include "widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent)
{
    setWindowTitle(tr("繪圖"));
}

void Widget::paintEvent(QPaintEvent *){
    QPainter painter(this);
    QPen pen(Qt::green, 5, Qt::DashLine, Qt::RoundCap, Qt::RoundJoin);
    painter.setPen(pen);
    painter.drawLine(10, 10, 100, 100);

    painter.setBrush(QBrush(Qt::blue, Qt::Dense1Pattern));
    painter.drawRect(120, 120, 100, 100);
}

main.cpp

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.resize(250,250);
    w.show();

    return a.exec();
}

QPen


可以把QPen的屬性拆開個別賦值,例如:

QPen pen(Qt::green, 5, Qt::DashLine, Qt::RoundCap, Qt::RoundJoin);

可以寫成:

QPen pen;
pen.setColor(Qt:: green);
pen.setWidth(5);
pen.setStyle(Qt::DashLine);
pen.setCapStyle(Qt::RoundCap);
pen.setJoinStyle(Qt::RoundJoin);