「C++」Qt可视化交互封装「遗传算法求解最佳路径问题(一日游规划,商旅问题)」

news/2024/11/30 1:45:25/

「C++」Qt可视化交互封装「遗传算法求解最佳路径问题(一日游规划,商旅问题)」

  • 1 效果与要求
    • 效果
    • 要求
  • 2 代码
    • 2.1 算法代码
    • 2.2 Qt代码
      • 2.2.1 Qt类
      • 2.2.2 自定义类
  • 参考

1 效果与要求

效果

「C++」遗传算法求解最佳路径问题(一日游规划)的Qt可视化

要求

  1. 使用Qt对程序进行可视化交互的封装;
  2. 考虑出发点和结束点,必须从出发点出发,在结束点结束;
  3. 鼠标点击进行出发点和结束点的选择;
  4. 输入预算和最远行程;
  5. 画出形成的路线;

2 代码

2.1 算法代码

主要采用遗传算法,具体可看上一篇文章:「C++」遗传算法求解最佳路径问题(一日游规划,商旅问题) 1。由于该算法程序在编写时采用的是随机起点和终点的策略,所以要对代码稍作修改即可。这里不再赘述。

2.2 Qt代码

2.2.1 Qt类

  1. class QLabel:可以创建一个 Label,用于显示程序运行中的提示;
  2. class QPushButton:创建一个按钮,为其绑定槽函数后可以实现点击按钮实现任意操作;
  3. class QSpinBox:创建一个 int 型的数字输入框,迭代次数应为整型;
  4. class QDoubleSpinBox:创建一个 double 型的数字输入框,预算和最远行程应为 double 型;
  5. class QComboBox:创建一个下拉选项框,用于选择出发点和结束点(选择出发点和结束点的一种实现方法);
  6. class QGraphicsView:创建一个GraphicsView场景,显示地图和路线;

这里没有采用 Qt creator 进行控件布局设置,而是通过代码构建。
示例:

Label_LBmaxgen = new QLabel(tr("迭代次数:"));
Label_LBmaxgen->setFont(label_font);Label_LBmap = new QLabel(tr("地图文件:"));
Label_LBmap->setFont(label_font);Label_LBbudget = new QLabel(tr("最大预算:"));
Label_LBbudget->setFont(label_font);Label_LBmaxtrip = new QLabel(tr("最大行程:"));
Label_LBmaxtrip->setFont(label_font);

2.2.2 自定义类

class mappointCircle:对 class QGraphicsEllipseItem 的继承,主要用于实现点击事件(左键单击选为起点,右键单机选为终点);

#pragma once
#include <QObject>
#include <QGraphicsItem>class mappointCircle : public QObject, public QGraphicsEllipseItem
{Q_OBJECT;
private:int id;int clicked; // 起点=1,终点=2,起点终点=3
public:mappointCircle(int id, QGraphicsItem *parent = nullptr);mappointCircle(int id, qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent = nullptr);~mappointCircle();
signals:void signal_selectHead(int id);void signal_selectEnd(int id);
protected:void mousePressEvent(QGraphicsSceneMouseEvent *event);
public:void changeColor();void reset();
};

通过 mousePressEvent 函数实现不同的点击事件。

参考


  1. 「C++」Qt可视化交互封装「遗传算法求解最佳路径问题(一日游规划,商旅问题)」 ↩︎


http://www.ppmy.cn/news/183474.html

相关文章

day10 -- 视图

brief 在 MySQL 中&#xff0c;视图&#xff08;View&#xff09;是一种虚拟的表格&#xff0c;它是由一个 SQL 查询语句所定义的。视图通常基于一个或多个实际存在的表格&#xff0c;并且可以与这些表格进行交互操作&#xff0c;就像真实的表格一样。 MySQL 视图是一个存储在…

uniapp如何实现最新发布apk版本检查和更新

前言: 我们要实现的用户进入apk首页之后,将安卓本机的apk版本和最新的apk版本对比,如果有更高级别的版本(版本号迭代的时候要逐渐增加,比如:本地100版本号(v1.0.0),最新的是102版本号(v1.0.2),那么就提示更新)要提示用户更新,去点击更新按钮下载最新的apk并且安装体…

深度学习-RepVGGNet

文章目录 前言一、RepVgg简介二、为什么训练时采用多分支结构三、为什么推理时使用单分支结构四、结构重参数化1、融合Conv2d和BN 前言 看yolonas代码&#xff0c;发现有QARepVgg网络&#xff0c;完全不懂&#xff0c;所以来补课&#xff0c;先看了RepVGG 这篇文章主要来自于霹…

五年制专转本能给你带来的仅仅是一纸本科文凭吗?

五年制专转本能给你带来的仅仅是一纸本科文凭吗&#xff1f; 经历过五年制专转本的人才会懂&#xff0c;专转本获得的不仅仅只是本科学历&#xff0c;还带给了自己更多宝贵的东西&#xff0c;对以后的发展起着不可磨灭的作用。 一、提升了平台&#xff0c;营造更好的环境 当…

2008年IT日历

2月8日 威斯康辛校友研究基金会向美国威斯康星州西区地方法院递交诉状反对英特 尔侵犯了他们的微处理器技术专利。在诉状中威斯康辛校友研究基金会要求英特尔提供补偿。 2月8日 针对InfoWorld网站发起的“挽救XP”行动&#xff0c;微软日前做出了回应&#xff0c;称将根据 用户…

MTK 人像双摄虚化导通流程

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、 创建 LogicalCameraName 相关的metadata二、 导通 LogicalCameraName Middleware 相关配置三、认 LogicalCameraName 是否创建成功四、双摄bringu…

windows 7

系统简介 系统名称&#xff1a;Windows 7 核心版本号&#xff1a;Windows NT 6.1 开发代号&#xff1a;Blackcomb及Windows Vienna 测试历史&#xff1a; 2007年12月20日&#xff1a;Windows 7 Milestone1&#xff08;build 6519.1&#xff09; 2008年12月12日&#xff1a;Wind…

软件魔方制作系统启动盘并安装win10系统

不多说&#xff0c;直接上干货&#xff01; 推荐软件&#xff1a;软件魔方 http://mofang.ruanmei.com/ 这里&#xff0c;我想说的是&#xff0c;这个软件来制作系统盘&#xff0c;是真的方便和好处多多。具体我不多说&#xff0c;本人也是用过其他的如大白菜等等。 最后&#…