【QT开发笔记-基础篇】| 第五章 绘图QPainter | 5.8 画刷设置

本节对应的视频讲解:B_站_视_频

https://www.bilibili.com/video/BV1A44y1Z7vz
在这里插入图片描述


本节讲解画刷的设置,包括画刷的颜色和样式

画刷设置完后,就可以把该画刷设置给 QPainter 了


1. 相关 API

1.1 画刷颜色

// 获取和设置画刷的颜色
const QColor &color() const
void setColor(const QColor &color)

1.2 样式

// 获取和设置画刷的样式
Qt::BrushStyle style() const
void setStyle(Qt::BrushStyle style)

其中,Qt::BrushStyle 是一个枚举,取值和效果,如下:

image-20221216100949545


2. 具体实现

2.1 关联信号槽

为颜色、样式关联信号槽

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 画刷颜色
    connect(ui->btnBrushColor, SIGNAL(clicked()), this, SLOT(onBtnBrushColorClicked()));
    // 画刷样式
    connect(ui->cboBrushStyle, SIGNAL(activated(QString)), this, SLOT(brushChanged()));
}

2.2 声明并实现槽函数

首先,在 widget.h 中声明 brushChanged 和 onBtnPenColorClicked 这两个槽函数:

class Widget : public QWidget
{
private slots:
    void onBtnBrushColorClicked();
    void brushChanged();
};

然后,在 widget.cpp 中实现这两个槽函数:

void Widget::onBtnBrushColorClicked()
{
    QColor color = QColorDialog::getColor(QColor(255, 0, 0), this, "画刷颜色");
    if ( !color.isValid() ) {
        return;
    }

    // 回显画笔颜色
    QPalette pal = ui->btnBrushColor->palette();
    pal.setColor(QPalette::Button, color);
    ui->btnBrushColor->setPalette(pal);
    ui->btnBrushColor->setAutoFillBackground(true);
    ui->btnBrushColor->setFlat(true);

    brushChanged();
}

void Widget::brushChanged()
{
    // 1. 获取画刷颜色
    QPalette pal = ui->btnBrushColor->palette();
    QColor color = pal.color(QPalette::Button);

    // 2. 获取画刷样式
    int index = ui->cboBrushStyle->currentIndex();
    Qt::BrushStyle style = (Qt::BrushStyle)ui->cboBrushStyle->itemData(index).toInt();

    // 3. 设置画刷
    if ( style == Qt::LinearGradientPattern ) {
        // 线性渐变
        //        QLinearGradient linearGradient(0, 0, 100, 100);
        QLinearGradient linearGradient(0, 50, 100, 50);
        linearGradient.setColorAt(0.0, Qt::white);
        linearGradient.setColorAt(0.2, color);
        linearGradient.setColorAt(1.0, Qt::black);
        ui->paintWidget->setBrush(linearGradient);
    } else if ( style == Qt::RadialGradientPattern ) {
        // 线径向渐变
        QRadialGradient radialGradient(50, 50, 50, 70, 70);
        radialGradient.setColorAt(0.0, Qt::white);
        radialGradient.setColorAt(0.2, color);
        radialGradient.setColorAt(1.0, Qt::black);
        ui->paintWidget->setBrush(radialGradient);
    } else if ( style == Qt::ConicalGradientPattern ) {
        // 锥形渐变
        // QConicalGradient(qreal cx, qreal cy, qreal startAngle)
        QConicalGradient conicalGradient(50, 50, 150);
        conicalGradient.setColorAt(0.0, Qt::white);
        conicalGradient.setColorAt(0.2, color);
        conicalGradient.setColorAt(1.0, Qt::black);
        ui->paintWidget->setBrush(conicalGradient);
    } else if ( style == Qt::TexturePattern ) {
        // 纹理样式
        ui->paintWidget->setBrush(QBrush(QPixmap(":/images/brick.png")));
    } else {
        // 其他
        ui->paintWidget->setBrush(QBrush(color, style));
    }
}

2.3 实现 setBrush 函数

在 widget.cpp 中的 brushChanged 槽函数中,最终调用 PaintWidget 类中的 setBrush 来设置画刷,完成绘制。

首先,在 PaintWidget.h 中声明 setBrush 函数,并定义一个成员变量 mBrush,如下:

#include <QBrush>

class PaintWidget : public QWidget
{
public slots:
    void setBrush(const QBrush &brush);

private:
    QBrush mBrush;
};

然后,在 PaintWidget.cpp 中,实现 setBrush 函数:

void PaintWidget::setBrush(const QBrush &brush)
{
    this->mBrush = brush;
    update();
}

最后,由于上边调用了 update 之后,系统会自动调用 paintEvent

因此,在 paintEvent 中需要将画刷设置给 QPainter,来完成绘制

void PaintWidget::paintEvent(QPaintEvent *event)
{

    QPainter painter(this);
    painter.setBrush(mBrush);
}

这样就完成了画刷的设置


2.4 优化

修改 widget.cpp,设置画刷的默认颜色为红色

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 回显画刷颜色
    pal = ui->btnBrushColor->palette();
    pal.setColor(QPalette::Button, QColor(0, 255, 0));
    ui->btnBrushColor->setPalette(pal);
    ui->btnBrushColor->setAutoFillBackground(true);
    ui->btnBrushColor->setFlat(true);

    brushChanged();
}
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在Linux Qt中,使用QPainter绘制线条并设置线条的粗细可以通过以下步骤实现: 1. 首先,创建一个QPainter对象,并指定在哪个界面中进行绘图。例如,可以使用以下代码创建一个QPainter对象: ``` QPainter painter(this); ``` 2. 接下来,创建一个QPen对象,并设置线条的宽度。可以使用以下代码设置线条的宽度: ``` QPen pen; pen.setWidth(2); // 设置线条的宽度为2个像素 ``` 3. 然后,将创建的QPen对象设置QPainter对象的画笔。可以使用以下代码设置画笔: ``` painter.setPen(pen); ``` 4. 最后,使用QPainter对象的drawLine函数绘制线条。可以使用以下代码绘制一条直线: ``` painter.drawLine(QPoint(x1, y1), QPoint(x2, y2)); ``` 在上述代码中,x1和y1是线条的起始点坐标,x2和y2是线条的结束点坐标。 通过以上步骤,您可以在Linux Qt中使用QPainter绘制线条并设置线条的粗细。请根据您的需求调整代码中的参数和坐标值。\[1\] #### 引用[.reference_title] - *1* [Qt——QPainter画图](https://blog.csdn.net/qq_35451572/article/details/80989808)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [QT学习笔记-第三天](https://blog.csdn.net/qq_56710307/article/details/126405886)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【QT开发笔记-基础】| 第五章 绘图QPainter | 5.7 画笔设置](https://blog.csdn.net/bili_mingwang/article/details/128393755)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大轮明王讲QT

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值