Qt第十八天

这篇博客介绍了如何使用Qt的Graphics View框架创建图形程序,包括绘制和操作各种基本图形如矩形、椭圆、圆、三角形等。图形项支持选择、拖动、缩放和旋转,并且可以通过双击、单击以及键盘按键进行交互。文章提供了相关的头文件、源文件和UI文件以展示实现过程。
摘要由CSDN通过智能技术生成

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值