painter.drawLine(i*25+200+nodeSize/2,(j+1)*25+50+nodeSize,i*25+200+nodeSize/2,(j+2)*25+50);,設置drawline的寬度
时间: 2023-06-28 08:06:39 浏览: 77
你可以在调用 `QPainter` 对象的 `setPen()` 方法之前,先创建一个 `QPen` 对象,并设置其属性,然后将其作为参数传递给 `setPen()` 方法,来设置 `drawLine()` 方法的宽度。示例代码如下:
```
// 创建 QPen 对象并设置属性
QPen pen(Qt::black);
pen.setWidth(2);
// 调用 setPen() 方法设置画笔
painter.setPen(pen);
// 绘制直线
painter.drawLine(i*25+200+nodeSize/2,(j+1)*25+50+nodeSize,i*25+200+nodeSize/2,(j+2)*25+50);
```
在上面的示例中,我们创建了一个 `QPen` 对象,并将其宽度设置为 2,然后调用 `setPen()` 方法设置画笔为该对象。接着,我们调用 `drawLine()` 方法绘制一条线段,这条线段就会使用我们设置的画笔,其宽度为 2。
相关问题
//畫出坐標之間的綫 for(int i=0;i<31;i++) { for(int j=0;j<31;j++) { if (i<30) { painter.setPen(QColor(25, 25, 112)); // 设置线条颜色 painter.drawLine(i*25+200+nodeSize,(j+1)*25+50+nodeSize/2,(i+1)*25+200,(j+1)*25+50+nodeSize/2); // 绘制线条 } if (j <30) { painter.setPen(QColor(25, 25, 112)); // 设置线条颜色 painter.drawLine(i*25+200+nodeSize/2,(j+1)*25+50+nodeSize,i*25+200+nodeSize/2,(j+2)*25+50); // 绘制线条 } } },修改爲會順澤下一個坐標的方向,根據agv的current坐標向前面加1
以下是修改后的代码:
```
//画出坐标之间的线
for(int i=0;i<31;i++) {
for(int j=0;j<31;j++) {
if (i<30) {
painter.setPen(QColor(25, 25, 112)); // 设置线条颜色
if (i == currentX && j == currentY) {
painter.drawLine(i*25+200+nodeSize,(j+1)*25+50+nodeSize/2,(i+2)*25+200,(j+1)*25+50+nodeSize/2); // 绘制线条
} else {
painter.drawLine(i*25+200+nodeSize,(j+1)*25+50+nodeSize/2,(i+1)*25+200,(j+1)*25+50+nodeSize/2); // 绘制线条
}
}
if (j <30) {
painter.setPen(QColor(25, 25, 112)); // 设置线条颜色
if (i == currentX && j == currentY) {
painter.drawLine(i*25+200+nodeSize/2,(j+1)*25+50+nodeSize,i*25+200+nodeSize/2,(j+3)*25+50); // 绘制线条
} else {
painter.drawLine(i*25+200+nodeSize/2,(j+1)*25+50+nodeSize,i*25+200+nodeSize/2,(j+2)*25+50); // 绘制线条
}
}
}
}
```
这个修改后的代码会根据 AGV 的 current 坐标向前面加1,来画出从当前坐标到下一个坐标的连线。如果当前坐标是 AGV 的 current 坐标,那么就会画出从当前坐标到下一个坐标的连线,否则就会画出普通的连线。
or(int i=0;i<31;i++) for(int j=0;j<31;j++) { switch(_MAP[i][j]) { case 1://画障礙物 painter.setBrush(QBrush(Qt::gray,Qt::SolidPattern)); painter.drawRect(QRect(i*25+200-(nodeSpacing-nodeSize)/2,(j+1)25+50-(nodeSpacing-nodeSize)/2,25,25)); break; case 0://画地圖 painter.setBrush(QBrush(QColor(66, 139, 230),Qt::SolidPattern)); painter.drawRect(QRect((i25+200),(j+1)25+50,nodeSize,nodeSize)); break; case 2://路線 painter.setBrush(QBrush(Qt::yellow,Qt::SolidPattern)); painter.drawRect(QRect(i25+200,(j+1)25+50,nodeSize,nodeSize)); break; case 3://agv painter.drawPixmap(i25+200-(nodeSpacing-nodeSize)/2,(j+1)25+50-(nodeSpacing-nodeSize)/2,25,25,QPixmap(":/new/prefix1/agv1.png").scaled(25,25)); case 5://agv模擬直綫路綫 // painter.setPen(QPen(Qt::yellow, 3, Qt::SolidLine)); // 设置画笔颜色、粗细和样式 // painter.drawLine(QPointF(i25+200+nodeSize/2, (j+1)*25+50+nodeSize/2), QPointF((i+1)*25+200-nodeSize/2, (j+1)25+50+nodeSize/2)); // 绘制直线 painter.setBrush(QBrush(Qt::yellow,Qt::SolidPattern)); painter.drawRect(QRect((i25+200),(j+1)25+50,nodeSize,nodeSize)); break; } if(setstar) { painter.setBrush(QBrush(Qt::red,Qt::SolidPattern)); painter.drawRect(QRect(_starx25+200-(nodeSpacing-nodeSize)/2,(_stary+1)25+50-(nodeSpacing-nodeSize)/2,25,25)); } if(settg) { painter.setBrush(QBrush(Qt::blue,Qt::SolidPattern)); painter.drawRect(QRect(_endx25+200-(nodeSpacing-nodeSize)/2,(_endy+1)25+50-(nodeSpacing-nodeSize)/2,25,25)); } if(setagv) { painter.drawPixmap(agv_x25+200-(nodeSpacing-nodeSize)/2,( agv_y+1)25+50-(nodeSpacing-nodeSize)/2,25,25,QPixmap(":/new/prefix1/agv1.png").scaled(25,25)); } } //畫出坐標之間的綫 for(int i=0;i<31;i++) { for(int j=0;j<31;j++) { if (i<30) { painter.setPen(QColor(66, 139, 230)); // 设置线条颜色 painter.drawLine(i25+200+nodeSize,(j+1)*25+50+nodeSize/2,(i+1)*25+200,(j+1)25+50+nodeSize/2); // 绘制线条 } if (j <30) { painter.setPen(QColor(66, 139, 230)); // 设置线条颜色 painter.drawLine(i25+200+nodeSize/2,(j+1)25+50+nodeSize,i25+200+nodeSize/2,(j+2)*25+50); // 绘制线条 } } },添加代碼:使兩點之間的值為nodezhi,如果nodezhi值為0,不進行繪畫,如果nodezhi為1,則在兩點直接畫出紅綫
可以在两点之间添加一个值为 nodezhi 的参数,用来表示两点之间的距离或状态,然后根据 nodezhi 的值来绘制不同的线条或者不绘制。
具体实现方式如下:
```cpp
for(int i=0;i<31;i++) {
for(int j=0;j<31;j++) {
if (i<30 && _MAP[i][j] != 0 && _MAP[i+1][j] != 0) {
// 两点之间的距离或状态值 nodezhi
int nodezhi = _MAP[i][j] + _MAP[i+1][j];
// 如果 nodezhi 值为 1,绘制红色线条
if (nodezhi == 1) {
painter.setPen(QPen(Qt::red, 3, Qt::SolidLine));
painter.drawLine(i*25+200+nodeSize/2, (j+1)*25+50+nodeSize/2, (i+1)*25+200-nodeSize/2, (j+1)*25+50+nodeSize/2);
}
// 否则,绘制蓝色线条
else {
painter.setPen(QColor(66, 139, 230));
painter.drawLine(i*25+200+nodeSize,(j+1)*25+50+nodeSize/2,(i+1)*25+200,(j+1)*25+50+nodeSize/2);
}
}
if (j <30 && _MAP[i][j] != 0 && _MAP[i][j+1] != 0) {
// 两点之间的距离或状态值 nodezhi
int nodezhi = _MAP[i][j] + _MAP[i][j+1];
// 如果 nodezhi 值为 1,绘制红色线条
if (nodezhi == 1) {
painter.setPen(QPen(Qt::red, 3, Qt::SolidLine));
painter.drawLine(i*25+200+nodeSize/2, (j+1)*25+50+nodeSize/2, i*25+200+nodeSize/2, (j+2)*25+50);
}
// 否则,绘制蓝色线条
else {
painter.setPen(QColor(66, 139, 230));
painter.drawLine(i*25+200+nodeSize/2,(j+1)*25+50+nodeSize,i*25+200+nodeSize/2,(j+2)*25+50);
}
}
}
}
```
其中,两点之间的距离或状态值 nodezhi 是通过 `_MAP` 数组中两个相邻节点的值相加得到的。如果 nodezhi 值为 1,表示两点之间存在障碍物或者其他特殊状态,需要绘制红色线条;否则,绘制蓝色线条。
阅读全文