#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;
没有合适的资源?快使用搜索试试~ 我知道了~
Qt5.14 绘画板 Qt Creator C++项目
共34个文件
bmp:11个
cpp:5个
png:4个
0 下载量 131 浏览量
2024-11-13
02:53:32
上传
评论
收藏 65KB RAR 举报
温馨提示
项目使用Qt5.14版本 Qt Creator开发,主要实现绘制矩形、正方形、椭圆、直线、梯形、圆形、三角形、文字等图形进行绘制,同时还可以对绘制的图形进行旋转、缩放、前后置、组合/打散、删除等操作。
资源推荐
资源详情
资源评论
收起资源包目录
huituban.rar (34个子文件)
huituban
mainwindow.h 2KB
drawing.cpp 0B
mainwindow.cpp 12KB
huituban.pro.user 22KB
res.cpp 0B
mygraphicsview.h 601B
main.cpp 183B
mainwindow.ui 9KB
mygraphicsview.cpp 876B
drawing.h 686B
huituban.pro 712B
huituban.pro.user.d054f3d 19KB
res.qrc 919B
images
rect.BMP 246B
polygon.BMP 246B
group.BMP 246B
zoomin.png 2KB
rotateright.png 2KB
delete1.jpg 23KB
text.bmp 1KB
ellipse.BMP 246B
triangle.jpg 14KB
circle.jpg 9KB
line.BMP 246B
backbrush.bmp 1KB
groupbreak.bmp 1KB
front.bmp 1KB
help.ICO 2KB
restore.bmp 1KB
rotateleft.png 2KB
square.jpg 5KB
zoomout.png 2KB
delete.webp 9KB
back.bmp 1KB
共 34 条
- 1
资源评论
逍遥易晓生
- 粉丝: 72
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 学校课程软件工程常见10道题目以及答案demo
- javaweb新手开发中常见的目录结构讲解
- 新手小白的git使用的手册入门学习demo
- 基于Java观察者模式的info-express多对多广播通信框架设计源码
- 利用python爬取豆瓣电影评分简单案例demo
- 机器人开发中常见的几道问题以及答案demo
- 基于SpringBoot和layuimini的简洁美观后台权限管理系统设计源码
- 实验报告五六代码.zip
- hdw-dubbo-ui基于vue、element-ui构建开发,实现后台管理前端功能.zip
- (Grafana + Zabbix + ASP.NET Core 2.1 + ECharts + Dapper + Swagger + layuiAdmin)基于角色授权的权限体系.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功