#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个

1 下载量 11 浏览量
2024-11-13
02:53:32
上传
评论
收藏 65KB RAR 举报
温馨提示
项目使用Qt5.14版本 Qt Creator开发,主要实现绘制矩形、正方形、椭圆、直线、梯形、圆形、三角形、文字等图形进行绘制,同时还可以对绘制的图形进行旋转、缩放、前后置、组合/打散、删除等操作。
资源推荐
资源详情
资源评论


























收起资源包目录





































共 34 条
- 1
资源评论



逍遥易晓生
- 粉丝: 91
- 资源: 9
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 包括缺陷和有限视场效应的Etalon模型 matlab代码.rar
- 车辆横向动力学模型simulink.rar
- 差分驱动和全球定位模块集simulink实现.rar
- 创建一个用于单目标或多目标的雷达数据立方体 matlab代码.rar
- 从零开始训练的裂缝二元分类对象检测和语义分割指标 matlab代码.rar
- 从船舶偏移量到静水压力 matlab代码.rar
- 多元闭合偏态正态分布Matlab代码.rar
- 多普勒雷达信号处理的示例 matlab代码.rar
- 电子战发射机检测和地理定位的MATLAB代码.rar
- 发射器:传输频率为千赫兹的正弦波信号 目标:改变传输信号的频率 接收器:接收信号并产生多普勒频率simulink.rar
- 二阶非线性系统的相平面绘制 matlab代码.rar
- 二项分布探索器Matlab代码.rar
- 改进的LSHADE-SPACMA算法与NSM方法附Matlab代码.rar
- 改进的MadDE算法与NSM方法Matlab代码.rar
- 分布式空时编码的多符号差分检测 matlab代码.rar
- 概率数据关联滤波器(PDAF)Matlab代码.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
