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

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

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可视化交互封装「遗传算法求解最佳路径问题(一日游规划,商旅问题)」 ↩︎

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

武的阶乘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值