for (int i = 0; i < n1; ++i) {//先画竖线 net.pointStart=QPoint(p1.x()+i*widt,p1.y()); net.pointEnd=QPoint(p1.x()+i*widt,p2.y()); res.append(net); }不显示画完的线
时间: 2024-01-13 08:02:15 浏览: 107
这段代码只是将竖线的起点和终点坐标存储在了res对象中,并没有进行实际的绘制操作。如果想要在界面上显示这些竖线,需要将存储在res对象中的坐标取出来,通过绘图函数进行绘制。
在Qt框架中,可以通过继承QWidget类来实现自定义的绘图控件,并在其绘图事件中进行绘制操作。具体来说,可以在paintEvent函数中使用QPainter对象对每条竖线进行绘制,示例代码如下:
```c++
void CustomWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setPen(QPen(Qt::black, 1)); // 设置画笔颜色和宽度
for (int i = 0; i < res.size(); ++i) {
painter.drawLine(res[i].pointStart, res[i].pointEnd); // 绘制一条线段
}
}
```
其中CustomWidget是自定义的绘图控件类,res是存储竖线坐标的对象。绘制完成后,需要将该控件添加到界面中才能看到绘制结果。
相关问题
QPoint start(agvs[i].current_x*25+200+nodeSize/2, (agvs[i].current_y+1)25+50+nodeSize/2); if (agvs[i].current_x == next_node->x && next_node->y > agvs[i].current_y)//向下 { QPoint end(next_node->x 25 + 200 +nodeSize/2, (agvs[i].current_y+1)25+50+nodeSize/20+16); painter.drawLine(start, end); }, // 畫出地圖 for(int i=0;i<31;i++) for(int j=0;j<31;j++) { switch(_MAP[i][j]) { case 1://画障礙物 painter.setBrush(QBrush(Qt::black,Qt::SolidPattern)); painter.drawRect(QRect((i25+200),(j+1)25+50,nodeSize,nodeSize)); break; case 0://画地圖 painter.setPen(QColor(66, 139, 230)); // 设置线条颜色 painter.setBrush(QBrush(QColor(66, 139, 230),Qt::SolidPattern)); painter.drawRect(QRect((i25+200),(j+1)*25+50,nodeSize,nodeSize));,將地圖上,drawline之内的坐標都變爲黑色
您可以通过在 `painter.drawLine()` 语句之前和之后添加以下语句来实现将该线段上的点变为黑色:
```
painter.setPen(QPen(Qt::black, 1, Qt::SolidLine));
```
这将设置画笔的颜色为黑色,线宽为 1 像素,线型为实线,然后您可以调用 `painter.drawLine()` 来绘制该线段。这样,该线段上的所有点都将以黑色显示。同样,您需要在绘制完该线段后恢复画笔的默认值,以便后续绘图不受影响。您可以使用以下语句将画笔重置为默认值:
```
painter.setPen(QPen(Qt::black, 1, Qt::SolidLine));
```
请注意,您需要确保在 `painter.drawLine()` 语句之前和之后都设置画笔的颜色,以便正确绘制该线段的颜色。
QPixmap bufferPixmap(size()); bufferPixmap.fill(Qt::transparent); if(_openflag == 0)//不是打开图片的,每一次新建一个空白的画布 { _pixmap = QPixmap(size());//新建pixmap _pixmap.fill(Qt::white);//背景色填充为白色 } QPixmap pix = _pixmap;//以_pixmap作为画布 QPainter p(&pix);//将_pixmap作为画布 QPainter p1(&bufferPixmap); unsigned int i1=0,i2=0,i3=0,i4=0;//各种图形的索引 unsigned int i5=0,i6=0,i7=0,i8=0;//各种图形的索引 Q_UNUSED(event); QPen pen; pen.setColor(color); p.setPen(pen); for(int c = 0;c<_shape.size();++c)//控制用户当前所绘图形总数 { if(_shape.at(c) == 1)//线条 { const QVector<QPoint>& line = _lines.at(i1++);//取出一条线条 for(int j=0; j<line.size()-1; ++j)//将线条的所有线段描绘出 { p.drawLine(line.at(j), line.at(j+1)); } } else if(_shape.at(c) == 2)//矩形 { p.drawRect(_rects.at(i2++)); } else if(_shape.at(c) == 3)//椭圆 { p.drawEllipse(_ellipse.at(i3++)); } else if(_shape.at(c) == 4)//直线 { p.drawLine(_line.at(i4).topLeft(),_line.at(i4).bottomRight()); i4++; } } if(drawFinished) { for(int c = 0;c<_shape.size();++c)//控制用户当前所绘图形总数 { if(_shape.at(c) == 1)//线条 { const QVector<QPoint>& line = _lines.at(i5++);//取出一条线条 for(int j=0; j<line.size()-1; ++j)//将线条的所有线段描绘出 { p1.drawLine(line.at(j), line.at(j+1)); } } else if(_shape.at(c) == 2)//矩形 { p1.drawRect(_rects.at(i6++)); } else if(_shape.at(c) == 3)//椭圆 { p1.drawEllipse(_ellipse.at(i7++)); } else if(_shape.at(c) == 4)//直线 { p1.drawLine(_line.at(i4).topLeft(),_line.at(i4).bottomRight()); i8++; } } p1.end(); } p.end();//结束对pix的绘制 p.begin(this); // 将当前窗体作为画布,开始对当前窗体进行绘制 p.drawPixmap(0, 0, bufferPixmap); p.drawPixmap(0, 0, pix);
这段代码是一个绘图相关的代码片段,主要是使用Qt框架进行图形的绘制。首先,通过创建一个空白的画布`bufferPixmap`,并用透明色进行填充。然后根据`_openflag`的值来判断是否需要新建一个空白的画布`_pixmap`,并将其背景色填充为白色。
接下来,使用`QPainter`类将`_pixmap`作为画布进行绘制操作。根据`_shape`中的值来确定绘制的图形类型,通过不同的条件分支来绘制线条、矩形、椭圆和直线等图形。其中,线条通过遍历`_lines`中的点来绘制,矩形通过`_rects`中的矩形参数进行绘制,椭圆通过`_ellipse`中的椭圆参数进行绘制,直线通过`_line`中的起始点和结束点进行绘制。
最后,根据`drawFinished`的值来决定是否在`bufferPixmap`上进行绘制。同样地,根据`_shape`的值来确定绘制的图形类型,并通过条件分支来绘制线条、矩形、椭圆和直线等图形。
最后,通过`QPainter`类将绘制好的图像分别绘制在当前窗体上,使用`drawPixmap()`方法设置位置和大小。
阅读全文