文件结构:

头文件boardlayer.h
#ifndef BOARDLAYER_H
#define BOARDLAYER_H
#include "qk2dview.h"
#include <QImage>
class BoardLayer : public Qk2dViewLayer
{
public:
BoardLayer();
const QImage& image() const { return m_image; }
QTransform imageToWorld() const { return m_imgToWorld; }
QTransform worldToImage() const { return m_worldToImg; }
private:
void draw_ex(QPainter &painter) override;
void calcTransform();
private:
QImage m_image;
QPointF m_origin;
double m_pixelSize;
QRectF m_worldRect; // image rect in world coordinate
QTransform m_imgToWorld; // convert image coordinate to world coordinate
QTransform m_worldToImg; // convert world coordinate to image coordinate
};
#endif // BOARDLAYER_H
component.h
#ifndef COMPONENT_H
#define COMPONENT_H
#include <QPointF>
#include <QSizeF>
#include <vector>
struct Component
{
Component(const QPointF ¢er, const QSizeF &size, float angle = 0)
: m_pos(center)
, m_size(size)
, m_angle(angle)
, m_unitVecX()
, m_unitVecY()
, m_vertex()
, m_selected(false)
{
calcVertex();
}
void calcVertex();
bool contains(const QPointF &point);
QPointF m_pos;
QSizeF m_size;
float m_angle;
QPointF m_unitVecX;
QPointF m_unitVecY;
QPointF m_vertex[8];
bool m_selected;
};
extern std::vector<Component> g_m_components;
#endif // COMPONENT_H
componentlayer.h
#ifndef COMPONENTLAYER_H
#define COMPONENTLAYER_H
#include "qk2dview.h"
#include "component.h"
class ComponentLayer : public Qk2dViewLayer
{
public:
ComponentLayer();
void mousePressEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
void mouseDoubleClickEvent(QMouseEvent *event) override;
private:
void draw_ex(QPainter &painter) override;
private:
Component* m_component;
int m_hitVertex;
};
#endif // COMPONENTLAYER_H
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "qk2dview.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
Qk2dView m_view;
};
#endif // MAINWINDOW_H
qk2dview.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "qk2dview.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
Qk2dView m_view;
};
#endif // MAINWINDOW_H
recipelayer.h
#ifndef RECIPELAYER_H
#define RECIPELAYER_H
#include "qk2dview.h"
class RecipeLayer : public Qk2dViewLayer
{
public:
RecipeLayer();
void mousePressEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
private:
void draw_ex(QPainter &painter) override;
private:
bool m_selecting;
QPointF m_selectStartPos;
QPointF m_selectEndPos;
};
#endif // RECIPELAYER_H
resultlayer.h
#ifndef RESULTLAYER_H
#define RESULTLAYER_H
#include "qk2dview.h"
class ResultLayer : public Qk2dViewLayer
{
public:
ResultLayer();
void setText(const QString& text, bool status);
private:
void draw_ex(QPainter &painter) override;
private:
QString m_text;
bool m_status;
};
#endif // RESULTLAYER_H
下面是源文件:
boardlayer.cpp
#include "boardlayer.h"
#include <QPointF>
#include <QPainter>
#include <QDebug>
BoardLayer::BoardLayer()
: Qk2dViewLayer()
, m_image("D:/testImage/0015.bmp")
, m_origin(650, 50) // origin at (650, 50)设置图片起始位置
, m_pixelSize(0.03) // 30 um / pixel收放比例
, m_worldRect()
, m_imgToWorld()
,
交互式图像处理软件:组件选择与编辑

该博客介绍了基于Qk2dView的图像处理软件,包括BoardLayer、ComponentLayer、RecipeLayer和ResultLayer等组件。BoardLayer用于显示图像并处理缩放和平移,ComponentLayer支持组件的选择和编辑,允许用户调整组件大小和位置。RecipeLayer和ResultLayer则分别处理配方选择和结果显示。用户可以通过鼠标事件与软件进行交互,如双击选择组件,拖动调整区域等。
最低0.47元/天 解锁文章
1018





