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 15:06:39 浏览: 42
你可以在调用 `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,表示两点之间存在障碍物或者其他特殊状态,需要绘制红色线条;否则,绘制蓝色线条。

相关推荐

void MainWindow::moveAgvs() { Astar astar; std::vector<std::vector<Node*>> paths(agvs.size()); // 得到agv的路綫 for (int i = 0; i < agvs.size(); i++) { if (agvs[i].getState() == false) { if (agvs[i].getLoad()){//如果是負載的狀態,則任務的起點到任務的終點 if (agvs[i].getCurrentX() == agvs[i].getEndX() && agvs[i].getCurrentY() == agvs[i].getEndY()) { agvs[i].setState(true); agvs[i].setLoad(false); tasks[i].setCompleted(2); task_to_agv(); } Node* start_node = new Node(agvs[i].getCurrentX(), agvs[i].getCurrentY()); Node* end_node1 = new Node(agvs[i].getEndX(), agvs[i].getEndY()); std::vector<Node*> path_to_end = astar.getPath(start_node, end_node1); path_to_end.erase(path_to_end.begin()); std::vector<Node*> path; path.insert(path.end(), path_to_end.begin(), path_to_end.end()); paths[i] = path;} else { //如果是空載的狀態,則行駛到任務的起點 //如果agv已經到達任務起點,變爲負載狀態 if (agvs[i].getCurrentX() == agvs[i].getStartX() && agvs[i].getCurrentY() == agvs[i].getStartY()) { agvs[i].setLoad(true); } Node* start_node = new Node(agvs[i].getCurrentX(), agvs[i].getCurrentY()); Node* end_node = new Node(agvs[i].getStartX(), agvs[i].getStartY()); std::vector<Node*> path_to_start = astar.getPath(start_node, end_node); std::vector<Node*> path; path.insert(path.end(), path_to_start.begin() + 1, path_to_start.end()); paths[i] = path;} } //模擬小車行駛 for (int i = 0; i < agvs.size(); i++) { if (! paths[i].empty()) { Node* next_node = paths[i][0]; float speed = agvs[i].getSpeed(); float distance = sqrt(pow(next_node->x - agvs[i].getCurrentX(), 2) + pow(next_node->y - agvs[i].getCurrentY(), 2)); float time = distance / speed * 1000; QTimer::singleShot(time, this, &, i, next_node { agvs[i].setCurrentX(next_node->x); agvs[i].setCurrentY(next_node->y); //std::cout << "AGV " << agvs[i].getid() << " current_x: " << agvs[i].getCurrentX() << " current_y: " << agvs[i].getCurrentY() <<std::endl; this->update(); }); } } } },for(int i=0;i<31;i++) for(int j=0;j<31;j++){ if (i<30) { // Create the nodes 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.drawLine(i25+200+nodeSize/2,(j+1)25+50+nodeSize,i25+200+nodeSize/2,(j+2)*25+50); } },將path的路徑坐標兩點之間的綫變成黃色

最新推荐

recommend-type

Java开发案例-springboot-66-自定义starter-源代码+文档.rar

Java开发案例-springboot-66-自定义starter-源代码+文档.rar Java开发案例-springboot-66-自定义starter-源代码+文档.rar Java开发案例-springboot-66-自定义starter-源代码+文档.rar Java开发案例-springboot-66-自定义starter-源代码+文档.rar Java开发案例-springboot-66-自定义starter-源代码+文档.rar Java开发案例-springboot-66-自定义starter-源代码+文档.rar
recommend-type

单家独院式别墅图纸D027-三层-12.80&10.50米-施工图.dwg

单家独院式别墅图纸D027-三层-12.80&10.50米-施工图.dwg
recommend-type

啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦

啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦
recommend-type

课程大作业基于Vue+PHP开发的简单问卷系统源码+使用说明.zip

【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 课程大作业基于Vue+PHP开发的简单问卷系统源码+使用说明.zip Project setup ``` npm install ``` ### Compiles and hot-reloads for development ``` npm run serve ``` ### Compiles and minifies for production ``` npm run build ``` ### Lints and fixes files ``` npm run lint ``` ### Customize configuration See [Configuration Reference](https://cli.vuejs.org/config/).
recommend-type

Django媒体资源学习源代码 (附一套简易Django文件上传源码)

Django FTP MEDIA_ROOT MEDIA_URL 源码
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

HSV转为RGB的计算公式

HSV (Hue, Saturation, Value) 和 RGB (Red, Green, Blue) 是两种表示颜色的方式。下面是将 HSV 转换为 RGB 的计算公式: 1. 将 HSV 中的 S 和 V 值除以 100,得到范围在 0~1 之间的值。 2. 计算色相 H 在 RGB 中的值。如果 H 的范围在 0~60 或者 300~360 之间,则 R = V,G = (H/60)×V,B = 0。如果 H 的范围在 60~120 之间,则 R = ((120-H)/60)×V,G = V,B = 0。如果 H 的范围在 120~180 之间,则 R = 0,G = V,B =
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。