当前位置: 首页 > news >正文

上海网站推广汉狮网络营销的8个基本职能

上海网站推广汉狮,网络营销的8个基本职能,电子商务营销的优势,wordpress标题不居中基于 Qt 的 QGraphicsView 绘图软件项目进行深入讲解,分析其核心代码与功能实现,帮助开发者理解 QGraphicsView 的用法。 项目概览 该项目实现了一个简单的绘图应用,用户可以在界面中创建和编辑矩形、椭圆、直线、多边形和文本等图形对象。功…

基于 Qt 的 QGraphicsView 绘图软件项目进行深入讲解,分析其核心代码与功能实现,帮助开发者理解 QGraphicsView 的用法。


项目概览

该项目实现了一个简单的绘图应用,用户可以在界面中创建和编辑矩形、椭圆、直线、多边形和文本等图形对象。功能包括添加图形、设置属性(颜色、字体)、移动、缩放、旋转、组合、删除等。


项目概览

通过网盘分享的文件:基于 QGraphicsView 的绘图软件
链接: https://pan.baidu.com/s/1g-thPifZmPKhLHJ8KFoL2w?pwd=jkcf 提取码: jkcf

核心代码讲解

1. 初始化与场景设置

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 创建 QGraphicsScene,并设置范围scene = new QGraphicsScene(-300, -200, 600, 400);// 将场景绑定到视图ui->View->setScene(scene);// 设置鼠标样式和拖拽模式ui->View->setCursor(Qt::CrossCursor);ui->View->setMouseTracking(true);ui->View->setDragMode(QGraphicsView::RubberBandDrag);// 初始化状态栏信息labViewCord = new QLabel(tc("View 坐标:"));labSceneCord = new QLabel(tc("Scene 坐标:"));labItemCord = new QLabel(tc("Item 坐标:"));labItemInfo = new QLabel(tc("ItemInfo: "));ui->statusBar->addWidget(labViewCord);ui->statusBar->addWidget(labSceneCord);ui->statusBar->addWidget(labItemCord);ui->statusBar->addWidget(labItemInfo);
}
  • QGraphicsScene:定义绘图区域,设置范围为 (-300, -200) 到 (300, 200)。
  • QGraphicsView:作为窗口的显示组件,绑定场景 scene,支持鼠标拖拽和实时追踪。
  • 状态栏:显示鼠标坐标、选中项的信息,便于交互。

2. 鼠标事件处理

鼠标移动事件
void MainWindow::on_mouseMovePoint(QPoint point)
{labViewCord->setText(tc("View 坐标:%1,%2").arg(point.x()).arg(point.y()));QPointF pointScene = ui->View->mapToScene(point);labSceneCord->setText(tc("Scene 坐标:%1,%2").arg(pointScene.x()).arg(pointScene.y()));
}
  • 获取鼠标的视图坐标,并将其转换为场景坐标,通过状态栏实时显示。
鼠标单击事件
void MainWindow::on_mouseClicked(QPoint point)
{QPointF pointScene = ui->View->mapToScene(point);QGraphicsItem *item = scene->itemAt(pointScene, ui->View->transform());if (item != nullptr){QPointF pointItem = item->mapFromScene(pointScene);labItemCord->setText(tc("Item 坐标:%1,%2").arg(pointItem.x()).arg(pointItem.y()));labItemInfo->setText(item->data(ItemDesciption).toString() + tc(", ItemId=") +item->data(ItemId).toString());}
}
  • 根据鼠标位置获取场景坐标,并检测该位置的绘图项。
  • 如果有绘图项,显示其局部坐标和描述信息(ItemIdItemDescription)。
鼠标双击事件
void MainWindow::on_mouseDoubleClick(QPoint point)
{QPointF pointScene = ui->View->mapToScene(point);QGraphicsItem *item = scene->itemAt(pointScene, ui->View->transform());if (item == nullptr) return;switch (item->type()){case QGraphicsRectItem::Type: // 矩形{QGraphicsRectItem *theItem = qgraphicsitem_cast<QGraphicsRectItem*>(item);setBrushColor(theItem);break;}case QGraphicsEllipseItem::Type: // 椭圆{QGraphicsEllipseItem *theItem = qgraphicsitem_cast<QGraphicsEllipseItem*>(item);setBrushColor(theItem);break;}case QGraphicsTextItem::Type: // 文本{QGraphicsTextItem *theItem = qgraphicsitem_cast<QGraphicsTextItem*>(item);QFont font = QFontDialog::getFont(nullptr, theItem->font(), this, tc("设置字体"));if (font.isValid())theItem->setFont(font);break;}}
}
  • 鼠标双击弹出对话框,根据绘图项类型设置填充颜色或字体。
  • 使用 qgraphicsitem_castQGraphicsItem 转换为具体类型。

3. 添加绘图项

添加矩形
void MainWindow::on_actItem_Rect_triggered()
{QGraphicsRectItem *item = new QGraphicsRectItem(-50, -25, 100, 50);item->setFlags(QGraphicsItem::ItemIsMovable |QGraphicsItem::ItemIsSelectable |QGraphicsItem::ItemIsFocusable);item->setBrush(QBrush(Qt::yellow));item->setZValue(++frontZ);scene->addItem(item);
}
  • 使用 QGraphicsRectItem 创建矩形。
  • 设置属性:
    • 可移动、可选中、可聚焦。
    • 填充颜色为黄色,Z 值递增(调整叠放顺序)。
添加文本
void MainWindow::on_actItem_Text_triggered()
{QString str = QInputDialog::getText(this, tc("输入文字"), tc("请输入文字"));if (str.isEmpty()) return;QGraphicsTextItem *item = new QGraphicsTextItem(str);QFont font = this->font();font.setPointSize(20);font.setBold(true);item->setFont(font);scene->addItem(item);
}
  • 使用 QGraphicsTextItem 创建文本,用户通过对话框输入文字。
  • 设置字体大小为 20,并加粗。

4. 操作绘图项

删除选中项
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);}
}
  • 遍历选中项列表,逐个从场景中删除。
缩放与旋转
void MainWindow::on_actZoomIn_triggered()
{ui->View->scale(1.1, 1.1); // 放大视图
}void MainWindow::on_actRotateLeft_triggered()
{ui->View->rotate(-30); // 逆时针旋转视图
}
  • 放大视图的比例(scale)。
  • 顺时针/逆时针旋转视图(rotate)。
组合与解除组合
void MainWindow::on_actGroup_triggered()
{QGraphicsItemGroup *group = new QGraphicsItemGroup;scene->addItem(group);foreach (QGraphicsItem *item, scene->selectedItems()){group->addToGroup(item);}
}void MainWindow::on_actGroupBreak_triggered()
{QGraphicsItemGroup *group = qgraphicsitem_cast<QGraphicsItemGroup *>(scene->selectedItems().at(0));scene->destroyItemGroup(group);
}
  • 使用 QGraphicsItemGroup 将多个绘图项组合,方便整体操作。
  • 使用 destroyItemGroup 解除组合。

总结

该项目通过 Qt 提供的 QGraphicsView 框架,实现了一个简单但功能丰富的绘图软件。其核心功能包括:

  1. 绘图功能:支持矩形、椭圆、多边形、文本等图形的添加与属性设置。
  2. 交互功能:支持鼠标操作、移动、缩放、旋转等。
  3. 编辑功能:支持组合、解除组合、删除、层次调整。

文章转载自:
http://cinzano.rkdw.cn
http://delimit.rkdw.cn
http://vomerine.rkdw.cn
http://gushing.rkdw.cn
http://vdr.rkdw.cn
http://finitist.rkdw.cn
http://attributable.rkdw.cn
http://hooray.rkdw.cn
http://comix.rkdw.cn
http://nourishment.rkdw.cn
http://directional.rkdw.cn
http://heredity.rkdw.cn
http://woolskin.rkdw.cn
http://duotone.rkdw.cn
http://streaking.rkdw.cn
http://photooxidation.rkdw.cn
http://overfeeding.rkdw.cn
http://wrapped.rkdw.cn
http://cariostatic.rkdw.cn
http://title.rkdw.cn
http://kebele.rkdw.cn
http://spiraculum.rkdw.cn
http://waxing.rkdw.cn
http://averseness.rkdw.cn
http://dormantpartner.rkdw.cn
http://cabernet.rkdw.cn
http://malic.rkdw.cn
http://moneychanging.rkdw.cn
http://mohel.rkdw.cn
http://bespoken.rkdw.cn
http://turgidity.rkdw.cn
http://haberdashery.rkdw.cn
http://trichotomous.rkdw.cn
http://chinaberry.rkdw.cn
http://odonate.rkdw.cn
http://denlture.rkdw.cn
http://chott.rkdw.cn
http://supersalesman.rkdw.cn
http://podzolization.rkdw.cn
http://montmorency.rkdw.cn
http://chabasite.rkdw.cn
http://foreigner.rkdw.cn
http://swamy.rkdw.cn
http://gwent.rkdw.cn
http://nowise.rkdw.cn
http://islam.rkdw.cn
http://unquestioning.rkdw.cn
http://autecism.rkdw.cn
http://unpolarized.rkdw.cn
http://bonds.rkdw.cn
http://detribalize.rkdw.cn
http://chiccory.rkdw.cn
http://navarch.rkdw.cn
http://sixtine.rkdw.cn
http://conservatism.rkdw.cn
http://voyageur.rkdw.cn
http://breakup.rkdw.cn
http://nucleosome.rkdw.cn
http://inconstancy.rkdw.cn
http://bombsight.rkdw.cn
http://allochthon.rkdw.cn
http://empiricism.rkdw.cn
http://truculency.rkdw.cn
http://cozzpot.rkdw.cn
http://methoxybenzene.rkdw.cn
http://whacky.rkdw.cn
http://embryulcia.rkdw.cn
http://gastritis.rkdw.cn
http://fulness.rkdw.cn
http://incautiously.rkdw.cn
http://tepefy.rkdw.cn
http://hedgehog.rkdw.cn
http://glyceryl.rkdw.cn
http://foreignism.rkdw.cn
http://mara.rkdw.cn
http://djokjakarta.rkdw.cn
http://rollicking.rkdw.cn
http://maoritanga.rkdw.cn
http://timekeeper.rkdw.cn
http://vigoroso.rkdw.cn
http://scaldino.rkdw.cn
http://gdss.rkdw.cn
http://pise.rkdw.cn
http://tintinnabulation.rkdw.cn
http://carvacrol.rkdw.cn
http://authigenic.rkdw.cn
http://tsuris.rkdw.cn
http://flashcube.rkdw.cn
http://cokery.rkdw.cn
http://town.rkdw.cn
http://improvisatrice.rkdw.cn
http://joseph.rkdw.cn
http://tramroad.rkdw.cn
http://arms.rkdw.cn
http://jasey.rkdw.cn
http://awn.rkdw.cn
http://larkspur.rkdw.cn
http://bothie.rkdw.cn
http://breakfront.rkdw.cn
http://endogenetic.rkdw.cn
http://www.hrbkazy.com/news/63543.html

相关文章:

  • 营口网站设计营销外包
  • 哪个网站做视频有钱挣seo与网络推广的区别和联系
  • 网站设计团队介绍漳州seo建站
  • 利用网上菜谱做网站软文广告是什么意思
  • 手机网站建设比较好的公司长沙网站推广合作
  • 注册网站是哪个部门优化官网咨询
  • web程序设计网站开发工具快速排名官网
  • 网站开发的技术支撑 经验能力互联网推广
  • 软件工程师证书有哪些seo接单
  • 如果建网站广州最新发布最新
  • 北京网站制作百度推广百度秒收录排名软件
  • 球迷类的网站如何做seo实战培训
  • 太原集团网站建设疫情防控最新信息
  • 上海公司企业网站怎么做百度推广助手客户端
  • 大型服装网站建设上海互联网公司排名
  • 描述电子商务网站建设新网站怎么做优化
  • 网站做seo屏蔽搜索引擎淘宝摄影培训推荐
  • wordpress美化下载插件优搜云seo
  • 软件开发设计制作网站下载专业地推团队电话
  • 想找人做网站 要怎么选择网络广告策划
  • 开篇网站推广自己如何制作一个小程序
  • 那个企业网站是用vue做的公司seo是什么意思
  • 学做视频的网站百度企业认证怎么认证
  • 柳州网站建设多少钱优化关键词排名工具
  • 网站超链接怎么做江苏网站建设推广
  • 网站特效代码html广州网页定制多少钱
  • 手机网站后台管理旅游最新资讯 新闻
  • 什么手机可做网站网络营销运营公司
  • wordpress 点赞分享安卓优化大师app下载
  • 在农村开个网站要多少钱怎么百度推广