#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTime>
#include <QGraphicsRectItem>
#include <QInputDialog>
#include <QColorDialog>
#include <QFontDialog>
#include <QKeyEvent>
#include <QDesktopServices>
void MainWindow::setItemProperty(QGraphicsItem *item,QString desciption)
{
item->setFlags(QGraphicsItem::ItemIsMovable //可移动
| QGraphicsItem::ItemIsSelectable //可选中
| QGraphicsItem::ItemIsFocusable); //可以获得焦点
item->setZValue(++frontZ); //叠放顺序号
quint32 v1=QRandomGenerator::global()->bounded(boundValue);
quint32 v2=QRandomGenerator::global()->bounded(boundValue);
item->setPos(v1,v2); //在场景中的位置
item->setData(ItemId,++seqNum); //图形项编号
item->setData(ItemDesciption,desciption); //图形项描述
scene->addItem(item); //添加到场景
scene->clearSelection();
item->setSelected(true);
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
scene=new QGraphicsScene(-300,-200,600,400); //创建QGraphicsScene
ui->gView->setScene(scene); //scene与view关联
ui->gView->setCursor(Qt::CrossCursor); //设置鼠标光标
ui->gView->setMouseTracking(true); //设置鼠标跟踪
ui->gView->setDragMode(QGraphicsView::RubberBandDrag); //设置拖动模式
this->setCentralWidget(ui->gView);
}
MainWindow::~MainWindow()
{
delete ui;
}
//鼠标移动,point是视图的坐标,物理坐标
void MainWindow::do_mouseMovePoint(QPoint point)
{
labViewCord->setText(QString::asprintf(
"View 坐标:%d,%d", point.x(),point.y()));
QPointF pointScene=ui->gView->mapToScene(point); //转换到Scene坐标
labSceneCord->setText(QString::asprintf(
"Scene 坐标:%.0f,%.0f", pointScene.x(),pointScene.y()));
}
//鼠标单击事件
void MainWindow::do_mouseClicked(QPoint point)
{
QPointF pointScene=ui->gView->mapToScene(point); //转换到Scene坐标
QGraphicsItem *item=NULL;
item=scene->itemAt(pointScene,ui->gView->transform()); //获取光标下的图形项
if (item != NULL) //有图形项
{
QPointF pointItem=item->mapFromScene(pointScene); //转换为图形项的局部坐标
labItemCord->setText(QString::asprintf(
"Item 坐标:%.0f,%.0f",pointItem.x(),pointItem.y()));
labItemInfo->setText(item->data(ItemDesciption).toString()+", ItemId="+
item->data(ItemId).toString());
}
}
//按键事件
void MainWindow::do_keyPress(QKeyEvent *event)
{
if (scene->selectedItems().count()!=1)
return; //没有选中的图形项,或选中的多于1个
QGraphicsItem *item=scene->selectedItems().at(0);
if (event->key()==Qt::Key_Delete) //删除
scene->removeItem(item);
else if (event->key()==Qt::Key_Space) //顺时针旋转90度
item->setRotation(90+item->rotation());
else if (event->key()==Qt::Key_PageUp) //放大
item->setScale(0.1+item->scale());
else if (event->key()==Qt::Key_PageDown)//缩小
item->setScale(-0.1+item->scale());
else if (event->key()==Qt::Key_Left) //左移
item->setX(-1+item->x());
else if (event->key()==Qt::Key_Right) //右移
item->setX(1+item->x());
else if (event->key()==Qt::Key_Up) //上移
item->setY(-1+item->y());
else if (event->key()==Qt::Key_Down) //下移
item->setY(1+item->y());
}
//添加一个矩形
void MainWindow::on_actItem_Rect_triggered()
{
QGraphicsRectItem *item=new QGraphicsRectItem(-50,-25,100,50);//创建一个矩形图元,并设置局部坐标为(-50,-25),长100宽50
// 颜色选择
QColorDialog colorDialog;
if (colorDialog.exec()) {
QColor color = colorDialog.selectedColor();
item->setBrush(QBrush(color));
}
setItemProperty(item, "矩形");//设置图元属性为“矩形”
}
//添加一个正方形
void MainWindow::on_actItem_Square_triggered()
{
QGraphicsRectItem *item=new QGraphicsRectItem(-50,-35,80,80);//设置局部坐标为(-50,-30)
QColorDialog colorDialog;
if (colorDialog.exec()) {
QColor color = colorDialog.selectedColor();
item->setBrush(QBrush(color));
}
setItemProperty(item, "正方形");
}
//添加一个椭圆
void MainWindow::on_actItem_Ellipse_triggered()
{
QGraphicsEllipseItem *item=new QGraphicsEllipseItem(-50,-30,100,60);//设置局部坐标为(-50,-30)
QColorDialog colorDialog;
if (colorDialog.exec()) {
QColor color = colorDialog.selectedColor();
item->setBrush(QBrush(color));
}
setItemProperty(item, "椭圆");
}
//添加一条直线
void MainWindow::on_actItem_Line_triggered()
{
QGraphicsLineItem *item=new QGraphicsLineItem(-100,0,100,0);//起始点坐标为(-100,0)
QPen pen(Qt::red);//设置画笔为红色
pen.setWidth(3);//宽度为3个像素
QColorDialog colorDialog;
if (colorDialog.exec()) {
QColor color = colorDialog.selectedColor();
item->setPen(QPen(color));
}
setItemProperty(item,"直线");
}
//添加一个梯形
void MainWindow::on_actItem_Polygon_triggered()
{
QGraphicsPolygonItem *item=new QGraphicsPolygonItem;
QPolygonF points; //创建多边形的顶点坐标列表
//添加顶点坐标
points.append(QPointF(-40,-40));
points.append(QPointF(40,-40));
points.append(QPointF(100,40));
points.append(QPointF(-100,40));
item->setPolygon(points); //设置图元的多边形形状
QColorDialog colorDialog;
if (colorDialog.exec()) {
QColor color = colorDialog.selectedColor();
item->setBrush(QBrush(color));
}
setItemProperty(item,"梯形");
}
//添加一个圆形
void MainWindow::on_actItem_Circle_triggered()
{
QGraphicsEllipseItem *item=new QGraphicsEllipseItem(-50,-50,100,100);
QColorDialog colorDialog;
if (colorDialog.exec()) {
QColor color = colorDialog.selectedColor();
item->setBrush(QBrush(color));
}
setItemProperty(item,"圆形");
}
//添加一个三角形
void MainWindow::on_actItem_Triangle_triggered()
{
QGraphicsPolygonItem *item=new QGraphicsPolygonItem;
QPolygonF points; //创建多边形的顶点坐标列表
//添加顶点坐标
points.append(QPointF(0,-40));
points.append(QPointF(60,40));
points.append(QPointF(-60,40));
item->setPolygon(points); //设置图元的多边形形状
QColorDialog colorDialog;
if (colorDialog.exec()) {
QColor color = colorDialog.selectedColor();
item->setBrush(QBrush(color));
}
setItemProperty(item,"三角形");
}
//添加文字
void MainWindow::on_actItem_Text_triggered()
{
QString str=QInputDialog::getText(this,"输入文字","请输入文字");
if (str.isEmpty())
return;
//创建一个文字图元,并设置显示的文本为用户输入的文字
QGraphicsTextItem *item=new QGraphicsTextItem(str);
QFont font=this->font();
font.setPointSize(20);
font.setBold(true);
item->setFont(font); //设置字体样式
setItemProperty(item,"文字");
}
//删除所有选中的图形项
void MainWindow::on_actEdit_Delete_triggered()
{
int cnt=scene->selectedItems().count();//获取选中的图形项的个数
for (int i=0;i<cnt;i++)
{//遍历选中的图形项
QGraphicsItem* item=scene->selectedItems().at(0);//获取选中的第一个图形项
scene->removeItem(item); //从场景中移除该图形项
delete item;
逍遥易晓生
- 粉丝: 91
- 资源: 9
最新资源
- weixin小程序项目基于微信小程序的学生公寓电费信息管理系统+ssm.zip
- weixin小程序项目基于微信小程序的四六级词汇+ssm.zip
- 通用打印bar,计算平均等组件
- 基于simulink的中性点不接地和消弧线圈接地系统单相故障仿真分析
- weixin小程序项目基于微信小程序的童装商城的设计与实现+ssm.zip
- weixin小程序项目基于微信小程序的商品展示+ssm.zip
- weixin小程序项目基于微信小程序的社区团购+ssm.zip
- weixin小程序项目基于微信小程序的科创微应用平台设计与实现+ssm.zip
- weixin小程序项目基于微信平台的旅游出行必备商城小程序+ssm.zip
- weixin小程序项目基于微信小程序的S店客户管理系统+ssm.zip
- carsim,prescan,simulink三者联合仿真,软件版本为carsim2020.0,prescan8.5,matlab2020b,紧急避撞行人,自主道,纵向制动压力控制加横向前轮转角控制
- weixin小程序项目基于微信小程序的购物系统+php.zip
- weixin小程序项目基于微信的追星小程序+ssm.zip
- weixin小程序项目基于微信的设备故障报修管理系统设计与实现+ssm.zip
- weixin小程序项目基于微信的原创音乐小程序的设计与实现+ssm.zip
- weixin小程序项目基于Vue.js的校园防疫微信小程序开发+ssm.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈