最近因为工作需要,刚接触Qt不久,最近就遇到了这样一个问题。
如图,在一个圆内,蓝色线圈起的区域是用drawLine()把360个点连起来的不规则的封闭图形,我试着用setBrush()设置,但是还是没效果。因为对Qt不是很熟练,想请教下各位可以有什么解决方法。
(我的意思就是把这个蓝色区域里的颜色填充成单一的颜色,比如蓝色)
我的设置方法是在设置画笔的时候就设置画刷:
painter.setPen(QPen(Qt::blue,1,Qt::SolidLine));
painter.setBrush(QBrush(Qt::blue,Qt::SolidPattern));
这样设置没效果。
是不是我不该用drawLine来连线呢?
请各位多多帮忙哈!
谢谢!
8 个解决方案
#1
void QPainter::drawPath ( const QPainterPath & path )
void QPainter::fillPath ( const QPainterPath & path, const QBrush & brush )
就ok了。。
何不用第三方控件呢。。
ChartDirector 完全满足你的要求。。有破解版(哈哈)
这是一个简单例子。
#2
drawPath()可以一次对多少个点连线呢?我把从文件中读取的360点保存在一个数组里,就是从第一个点开始,依次连360个点。
第三方控件我还是先放放吧,唉,血案把Qt搞定再说。今天一天都在琢磨这个问题,头疼死了。
#3
任意多个啊。。
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
void QPainter::drawPath ( const QPainterPath & path )
void QPainter::fillPath ( const QPainterPath & path, const QBrush & brush )
就ok了。。
何不用第三方控件呢。。
ChartDirector 完全满足你的要求。。有破解版(哈哈)
这是一个简单例子。
drawPath()可以一次对多少个点连线呢?我把从文件中读取的360点保存在一个数组里,就是从第一个点开始,依次连360个点。
第三方控件我还是先放放吧,唉,血案把Qt搞定再说。今天一天都在琢磨这个问题,头疼死了。
任意多个啊。。
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解决这个问题了。
#5
呵呵 我是来学习的
#6
用QPolygon可以实现。
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
用QPolygon可以实现。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做出来了,不过还是很感谢教了我另一种方法。
#8
楼主你还有填充的代码么?可以给一份来学习一下么?谢谢
#1
void QPainter::drawPath ( const QPainterPath & path )
void QPainter::fillPath ( const QPainterPath & path, const QBrush & brush )
就ok了。。
何不用第三方控件呢。。
ChartDirector 完全满足你的要求。。有破解版(哈哈)
这是一个简单例子。
#2
void QPainter::drawPath ( const QPainterPath & path )
void QPainter::fillPath ( const QPainterPath & path, const QBrush & brush )
就ok了。。
何不用第三方控件呢。。
ChartDirector 完全满足你的要求。。有破解版(哈哈)
这是一个简单例子。
drawPath()可以一次对多少个点连线呢?我把从文件中读取的360点保存在一个数组里,就是从第一个点开始,依次连360个点。
第三方控件我还是先放放吧,唉,血案把Qt搞定再说。今天一天都在琢磨这个问题,头疼死了。
#3
void QPainter::drawPath ( const QPainterPath & path )
void QPainter::fillPath ( const QPainterPath & path, const QBrush & brush )
就ok了。。
何不用第三方控件呢。。
ChartDirector 完全满足你的要求。。有破解版(哈哈)
这是一个简单例子。
drawPath()可以一次对多少个点连线呢?我把从文件中读取的360点保存在一个数组里,就是从第一个点开始,依次连360个点。
第三方控件我还是先放放吧,唉,血案把Qt搞定再说。今天一天都在琢磨这个问题,头疼死了。
任意多个啊。。
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
void QPainter::drawPath ( const QPainterPath & path )
void QPainter::fillPath ( const QPainterPath & path, const QBrush & brush )
就ok了。。
何不用第三方控件呢。。
ChartDirector 完全满足你的要求。。有破解版(哈哈)
这是一个简单例子。
drawPath()可以一次对多少个点连线呢?我把从文件中读取的360点保存在一个数组里,就是从第一个点开始,依次连360个点。
第三方控件我还是先放放吧,唉,血案把Qt搞定再说。今天一天都在琢磨这个问题,头疼死了。
任意多个啊。。
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解决这个问题了。
#5
呵呵 我是来学习的
#6
用QPolygon可以实现。
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
用QPolygon可以实现。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做出来了,不过还是很感谢教了我另一种方法。
#8
楼主你还有填充的代码么?可以给一份来学习一下么?谢谢