Graphics View绘图程序实例
**可以创建矩形,椭圆,圆,三角形,梯形,直线,文字等基本图形项
每个图形项可以被选择,拖动,放缩,旋转
图形项的前置和后置,组合和打散
双击,单击图形项会有不同的显示
键盘的按键也可以对图形项操作
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<QGraphicsScene>
#include<QLabel>
#include<QGraphicsView>
#include<QTime>
#include<QPointF>
#include<QGraphicsItem>
#include<QFontDialog>
#include<QColorDialog>
#include<QGraphicsItemGroup>
#include<QGraphicsEllipseItem>
#include<QInputDialog>
#include<QGraphicsTextItem>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
static const int ItemId=1;//图形项自定义数据的Key
static const int ItemDesciption=2;//图形项自定义数据的Key
int seqNum=0;//用于图形项的编号,每个图形项有一个编号
int frontZ=0;//用于bring to front
//数值越大,越在前面显示
int backZ=0;//用于bring to back
//数值越小,越在后面显示
QGraphicsScene *scene;
QLabel *labViewCord;//用于记录View坐标
QLabel *labSceneCord;//用于记录Scene坐标
QLabel *labItemCord;//用于记录Item坐标
QLabel *labItemInfo;//用于距离Item信息
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_mouseMovePoint(QPoint point);//鼠标移动
void on_mouseClicked(QPoint point);//鼠标单击
void on_mouseDoubleClick(QPoint point);//鼠标双击
void on_keyPress(QKeyEvent *event);//按键事件
void on_actZoomIn_triggered();
void on_actZoomOut_triggered();
void on_actRotateLeft_triggered();
void on_actRotateRight_triggered();
void on_actRestore_triggered();
void on_actEdit_Front_triggered();
void on_actEdit_Back_triggered();
void on_actGroup_triggered();
void on_actGroupBreak_triggered();
void on_actEdit_Delete_triggered();
void on_actItem_Ellipse_triggered();
void on_actItem_Rect_triggered();
void on_actItem_Circle_triggered();
void on_actItem_Triangle_triggered();
void on_actItem_Polygon_triggered();
void on_actItem_Line_triggered();
void on_actItem_Text_triggered();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
qwgraphicsview.h
#ifndef QWGRAPHICSVIEW_H
#define QWGRAPHICSVIEW_H
#include <QGraphicsView>
#include<QObject>
#include<QMouseEvent>
#include<QKeyEvent>
#include<QPoint>
class QWGraphicsView : public QGraphicsView
{
Q_OBJECT
public:
QWGraphicsView(QWidget *parent=nullptr);
protected:
void mouseMoveEvent(QMouseEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseDoubleClickEvent(QMouseEvent *event);
void keyPressEvent(QKeyEvent *event);
signals:
void mouseMovePoint(QPoint point);//鼠标移动
void mouseClicked(QPoint point);//鼠标单击
void mouseDoubleClicked(QPoint point);//鼠标双击
void keyPress(QKeyEvent *event);//按键事件
};
#endif // QWGRAPHICSVIEW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建状态栏标签
labViewCord=new QLabel("View 坐标:");
labViewCord->setMinimumWidth(150);
ui->statusBar->addWidget(labViewCord);
labSceneCord=new QLabel("Scene 坐标:");
labSceneCord->setMinimumWidth(150);
ui->statusBar->addWidget(labSceneCord);
labItemCord=new QLabel("Item 坐标:");
labItemCord->setMinimumWidth(150);
ui->statusBar->addWidget(labItemCord);
labItemInfo=new QLabel("ItemInfo: ");
labItemInfo->setMinimumWidth(200);
ui->statusBar->addWidget(labItem