Qt中如何给一个用drawLine绘制的封闭的多边形的填充颜色?

时间:2021-09-29 11:55:51

最近因为工作需要,刚接触Qt不久,最近就遇到了这样一个问题。
Qt中如何给一个用drawLine绘制的封闭的多边形的填充颜色?


如图,在一个圆内,蓝色线圈起的区域是用drawLine()把360个点连起来的不规则的封闭图形,我试着用setBrush()设置,但是还是没效果。因为对Qt不是很熟练,想请教下各位可以有什么解决方法。
(我的意思就是把这个蓝色区域里的颜色填充成单一的颜色,比如蓝色)
我的设置方法是在设置画笔的时候就设置画刷:

painter.setPen(QPen(Qt::blue,1,Qt::SolidLine));
painter.setBrush(QBrush(Qt::blue,Qt::SolidPattern));

这样设置没效果。

是不是我不该用drawLine来连线呢?
请各位多多帮忙哈!
Qt中如何给一个用drawLine绘制的封闭的多边形的填充颜色?
谢谢!

8 个解决方案

#1



void QPainter::drawPath ( const QPainterPath & path )
void QPainter::fillPath ( const QPainterPath & path, const QBrush & brush )

就ok了。。
何不用第三方控件呢。。
ChartDirector 完全满足你的要求。。有破解版(哈哈)
Qt中如何给一个用drawLine绘制的封闭的多边形的填充颜色?
这是一个简单例子。

#2


引用 1 楼 kfbyj 的回复:

void QPainter::drawPath ( const QPainterPath & path )
void QPainter::fillPath ( const QPainterPath & path, const QBrush & brush )

就ok了。。
何不用第三方控件呢。。
ChartDirector 完全满足你的要求。。有破解版(哈哈)
Qt中如何给一个用drawLine绘制的封闭的多边形的填充颜色?
这是一个简单例子。


drawPath()可以一次对多少个点连线呢?我把从文件中读取的360点保存在一个数组里,就是从第一个点开始,依次连360个点。
第三方控件我还是先放放吧,唉,血案把Qt搞定再说。今天一天都在琢磨这个问题,头疼死了。
Qt中如何给一个用drawLine绘制的封闭的多边形的填充颜色?

#3


引用 2 楼 luohao1213 的回复:
Quote: 引用 1 楼 kfbyj 的回复:


void QPainter::drawPath ( const QPainterPath & path )
void QPainter::fillPath ( const QPainterPath & path, const QBrush & brush )

就ok了。。
何不用第三方控件呢。。
ChartDirector 完全满足你的要求。。有破解版(哈哈)
这是一个简单例子。


drawPath()可以一次对多少个点连线呢?我把从文件中读取的360点保存在一个数组里,就是从第一个点开始,依次连360个点。
第三方控件我还是先放放吧,唉,血案把Qt搞定再说。今天一天都在琢磨这个问题,头疼死了。
Qt中如何给一个用drawLine绘制的封闭的多边形的填充颜色?


任意多个啊。。
void QPainter::drawPath ( const QPainterPath & path )
QPainterPath设置路径的时候你可以自己设置多少个点。。360个肯定不是问题。

官方的例子

 QPainterPath path;
 path.moveTo(20, 80);
 path.lineTo(20, 30);
 path.cubicTo(80, 0, 50, 50, 80, 80);

 QPainter painter(this);
 painter.drawPath(path);

#4


引用 3 楼 kfbyj 的回复:
Quote: 引用 2 楼 luohao1213 的回复:

Quote: 引用 1 楼 kfbyj 的回复:


void QPainter::drawPath ( const QPainterPath & path )
void QPainter::fillPath ( const QPainterPath & path, const QBrush & brush )

就ok了。。
何不用第三方控件呢。。
ChartDirector 完全满足你的要求。。有破解版(哈哈)
这是一个简单例子。


drawPath()可以一次对多少个点连线呢?我把从文件中读取的360点保存在一个数组里,就是从第一个点开始,依次连360个点。
第三方控件我还是先放放吧,唉,血案把Qt搞定再说。今天一天都在琢磨这个问题,头疼死了。
Qt中如何给一个用drawLine绘制的封闭的多边形的填充颜色?


任意多个啊。。
void QPainter::drawPath ( const QPainterPath & path )
QPainterPath设置路径的时候你可以自己设置多少个点。。360个肯定不是问题。

官方的例子

 QPainterPath path;
 path.moveTo(20, 80);
 path.lineTo(20, 30);
 path.cubicTo(80, 0, 50, 50, 80, 80);

 QPainter painter(this);
 painter.drawPath(path);

大神,谢谢了哈,按照drawPath解决这个问题了。 Qt中如何给一个用drawLine绘制的封闭的多边形的填充颜色?

#5


呵呵 我是来学习的

#6


用QPolygon可以实现。
Qt中如何给一个用drawLine绘制的封闭的多边形的填充颜色?
PolygonWidget::PolygonWidget(QWidget *parent) : QWidget(parent), ui(new Ui::PolygonWidget) {
    ui->setupUi(this);

    polygon << QPoint(20, 20);
    polygon << QPoint(122, 25);
    polygon << QPoint(130, 120);
    polygon << QPoint(140, 150);
    polygon << QPoint(20, 110);
    polygon << QPoint(0, 50);
}

PolygonWidget::~PolygonWidget() {
    delete ui;
}

void PolygonWidget::paintEvent(QPaintEvent *event) {
    Q_UNUSED(event);

    QPainter painter(this);
    painter.setBrush(Qt::red);
    painter.drawConvexPolygon(polygon);
}

#7


引用 6 楼 Inhibitory 的回复:
用QPolygon可以实现。
Qt中如何给一个用drawLine绘制的封闭的多边形的填充颜色?
PolygonWidget::PolygonWidget(QWidget *parent) : QWidget(parent), ui(new Ui::PolygonWidget) {
    ui->setupUi(this);

    polygon << QPoint(20, 20);
    polygon << QPoint(122, 25);
    polygon << QPoint(130, 120);
    polygon << QPoint(140, 150);
    polygon << QPoint(20, 110);
    polygon << QPoint(0, 50);
}

PolygonWidget::~PolygonWidget() {
    delete ui;
}

void PolygonWidget::paintEvent(QPaintEvent *event) {
    Q_UNUSED(event);

    QPainter painter(this);
    painter.setBrush(Qt::red);
    painter.drawConvexPolygon(polygon);
}

感觉和drawPath的流程差不多,虽然已经用drawPath做出来了,不过还是很感谢教了我另一种方法。 Qt中如何给一个用drawLine绘制的封闭的多边形的填充颜色?

#8


楼主你还有填充的代码么?可以给一份来学习一下么?谢谢 Qt中如何给一个用drawLine绘制的封闭的多边形的填充颜色?

#1



void QPainter::drawPath ( const QPainterPath & path )
void QPainter::fillPath ( const QPainterPath & path, const QBrush & brush )

就ok了。。
何不用第三方控件呢。。
ChartDirector 完全满足你的要求。。有破解版(哈哈)
Qt中如何给一个用drawLine绘制的封闭的多边形的填充颜色?
这是一个简单例子。

#2


引用 1 楼 kfbyj 的回复:

void QPainter::drawPath ( const QPainterPath & path )
void QPainter::fillPath ( const QPainterPath & path, const QBrush & brush )

就ok了。。
何不用第三方控件呢。。
ChartDirector 完全满足你的要求。。有破解版(哈哈)
Qt中如何给一个用drawLine绘制的封闭的多边形的填充颜色?
这是一个简单例子。


drawPath()可以一次对多少个点连线呢?我把从文件中读取的360点保存在一个数组里,就是从第一个点开始,依次连360个点。
第三方控件我还是先放放吧,唉,血案把Qt搞定再说。今天一天都在琢磨这个问题,头疼死了。
Qt中如何给一个用drawLine绘制的封闭的多边形的填充颜色?

#3


引用 2 楼 luohao1213 的回复:
Quote: 引用 1 楼 kfbyj 的回复:


void QPainter::drawPath ( const QPainterPath & path )
void QPainter::fillPath ( const QPainterPath & path, const QBrush & brush )

就ok了。。
何不用第三方控件呢。。
ChartDirector 完全满足你的要求。。有破解版(哈哈)
这是一个简单例子。


drawPath()可以一次对多少个点连线呢?我把从文件中读取的360点保存在一个数组里,就是从第一个点开始,依次连360个点。
第三方控件我还是先放放吧,唉,血案把Qt搞定再说。今天一天都在琢磨这个问题,头疼死了。
Qt中如何给一个用drawLine绘制的封闭的多边形的填充颜色?


任意多个啊。。
void QPainter::drawPath ( const QPainterPath & path )
QPainterPath设置路径的时候你可以自己设置多少个点。。360个肯定不是问题。

官方的例子

 QPainterPath path;
 path.moveTo(20, 80);
 path.lineTo(20, 30);
 path.cubicTo(80, 0, 50, 50, 80, 80);

 QPainter painter(this);
 painter.drawPath(path);

#4


引用 3 楼 kfbyj 的回复:
Quote: 引用 2 楼 luohao1213 的回复:

Quote: 引用 1 楼 kfbyj 的回复:


void QPainter::drawPath ( const QPainterPath & path )
void QPainter::fillPath ( const QPainterPath & path, const QBrush & brush )

就ok了。。
何不用第三方控件呢。。
ChartDirector 完全满足你的要求。。有破解版(哈哈)
这是一个简单例子。


drawPath()可以一次对多少个点连线呢?我把从文件中读取的360点保存在一个数组里,就是从第一个点开始,依次连360个点。
第三方控件我还是先放放吧,唉,血案把Qt搞定再说。今天一天都在琢磨这个问题,头疼死了。
Qt中如何给一个用drawLine绘制的封闭的多边形的填充颜色?


任意多个啊。。
void QPainter::drawPath ( const QPainterPath & path )
QPainterPath设置路径的时候你可以自己设置多少个点。。360个肯定不是问题。

官方的例子

 QPainterPath path;
 path.moveTo(20, 80);
 path.lineTo(20, 30);
 path.cubicTo(80, 0, 50, 50, 80, 80);

 QPainter painter(this);
 painter.drawPath(path);

大神,谢谢了哈,按照drawPath解决这个问题了。 Qt中如何给一个用drawLine绘制的封闭的多边形的填充颜色?

#5


呵呵 我是来学习的

#6


用QPolygon可以实现。
Qt中如何给一个用drawLine绘制的封闭的多边形的填充颜色?
PolygonWidget::PolygonWidget(QWidget *parent) : QWidget(parent), ui(new Ui::PolygonWidget) {
    ui->setupUi(this);

    polygon << QPoint(20, 20);
    polygon << QPoint(122, 25);
    polygon << QPoint(130, 120);
    polygon << QPoint(140, 150);
    polygon << QPoint(20, 110);
    polygon << QPoint(0, 50);
}

PolygonWidget::~PolygonWidget() {
    delete ui;
}

void PolygonWidget::paintEvent(QPaintEvent *event) {
    Q_UNUSED(event);

    QPainter painter(this);
    painter.setBrush(Qt::red);
    painter.drawConvexPolygon(polygon);
}

#7


引用 6 楼 Inhibitory 的回复:
用QPolygon可以实现。
Qt中如何给一个用drawLine绘制的封闭的多边形的填充颜色?
PolygonWidget::PolygonWidget(QWidget *parent) : QWidget(parent), ui(new Ui::PolygonWidget) {
    ui->setupUi(this);

    polygon << QPoint(20, 20);
    polygon << QPoint(122, 25);
    polygon << QPoint(130, 120);
    polygon << QPoint(140, 150);
    polygon << QPoint(20, 110);
    polygon << QPoint(0, 50);
}

PolygonWidget::~PolygonWidget() {
    delete ui;
}

void PolygonWidget::paintEvent(QPaintEvent *event) {
    Q_UNUSED(event);

    QPainter painter(this);
    painter.setBrush(Qt::red);
    painter.drawConvexPolygon(polygon);
}

感觉和drawPath的流程差不多,虽然已经用drawPath做出来了,不过还是很感谢教了我另一种方法。 Qt中如何给一个用drawLine绘制的封闭的多边形的填充颜色?

#8


楼主你还有填充的代码么?可以给一份来学习一下么?谢谢 Qt中如何给一个用drawLine绘制的封闭的多边形的填充颜色?