基于Qt实现的简易矢量图形生成与修改系统
c++课程结束后完成的大作业,希望对初学c++和Qt的朋友有一定的帮助。
总体思路:
主要的模块有两个一个是窗口模块,一个是绘图模块。窗口模块Widget继承自QWidget类,实现界面窗口的显示,功能按钮的显示和绘图模块的显示。绘图模块。绘图模块MyQS继承自QGraphicsScene。重载了鼠标的事件,实现了鼠标坐标的捕捉。
最终运行出的窗口界面如下:
其中状态选择下可以选择对图形进行“绘制”和“修改”
绘制时可选择图形和颜色,图形包括矩形,椭圆形,等腰三角形,直角三角形,菱形等
对绘制好的图形进行修改操作时,用鼠标点击想要修改的图形,可以对其进行大小缩放,顺时针或逆时针方向旋转的操作,如下图:
具体代码如下:
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QWidget>
#include <qdebug.h>
#include <QKeyEvent>
#include <qgraphicsitem.h>
#include <QPropertyAnimation>
#include <QTimer>
#include <QtCore/qmath.h>
#include <QFileDialog>
#include <QSvgGenerator>
#include <QColorDialog>
#include <QGraphicsItem>
#include "myqs.h"
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
void paint(QPainter &painter);
void saveSceneToSvg(QGraphicsScene* s, const QString &filename);
QGraphicsRectItem* background;
MyQS *m_scene;//绘图
QGraphicsScene *p_scene;//平移
QGraphicsScene *c_scene;//颜色
QGraphicsRectItem *c_item;
QList<QGraphicsItem*>* itemList;
public slots:
void mousemove_signal(QPointF point);
private:
Ui::Widget *ui;
QString path;
private slots:
//void on_comboBox_currentIndexChanged(const QString &arg1);
void on_comboBox_currentIndexChanged(int index);
void on_saveButton_clicked();
void on_pushButton_clicked();
void on_comboBox_2_currentIndexChanged(int index);
void setUI(bool b);
void on_sizeplusButton_clicked();
void on_sizeminusButton_clicked();
void on_aplButton_clicked();
void on_aprButton_clicked();
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
int w = ui->graphicsView->width();
int h = ui->graphicsView->height();
//创建图形列表
itemList = new QList<QGraphicsItem*>();
//创建颜色选择器
c_scene = new QGraphicsScene();
c_item = new QGraphicsRectItem;
c_item->setBrush(QBrush(QColor("#FFFFFF")));
c_item->setRect(-1,-1,20,20);
c_scene->addItem(c_item);
ui->colorView->setScene(c_scene);
//创建画图层
m_scene=new MyQS(0, 0, w-2,h-2);
m_scene->itemList =this->itemList;
//白色背景
// background = new QGraphicsRectItem;
// background->setBrush(QBrush(QColor("#FFFFFF")));
// background->setRect(-1,-1,790,590);
// m_scene->addItem(background);
p_scene=new QGraphicsScene(0, 0, w-2,h-2);
// background = new QGraphicsRectItem;
// background->setBrush(QBrush(QColor("#FFFFFF")));
// background->setRect(-1,-1,790,590);
// p_scene->addItem(background);
ui->graphicsView->setScene(m_scene);
// m_scene->setSceneRect(0,0,790,590);
// background = new QGraphicsRectItem;
// background->setBrush(QBrush(QColor("#445566")));
// background->setRect(0,0,790,590);
// m_scene->addItem(background);
this->setUI(0);
}
Widget::~Widget()
{
delete ui;
}
void Widget::mousemove_signal(QPointF point)
{
qDebug()<<point.x<