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

Qt实现画的图片移动

要实现左键点击鼠标时图片跟着鼠标移动,可以通过以下步骤来实现:1. 在QGraphicsView的构造函数中设置鼠标跟踪属性,以便能够捕获鼠标事件。```cpp
QGraphicsView::QGraphicsView(QWidget *parent) : QGraphicsView(parent)
{setMouseTracking(true);
}
```2. 在QGraphicsView中重写鼠标按下、鼠标移动和鼠标释放事件的处理函数。```cpp
void QGraphicsView::mousePressEvent(QMouseEvent *event)
{if (event->button() == Qt::LeftButton) {// 获取点击位置QPointF pos = mapToScene(event->pos());// 判断是否点击到图片if (scene()->itemAt(pos, QTransform()) == imageItem) {// 记录鼠标起始位置lastMousePos = pos;// 设置鼠标移动跟踪setDragMode(QGraphicsView::ScrollHandDrag);}}QGraphicsView::mousePressEvent(event);
}void QGraphicsView::mouseMoveEvent(QMouseEvent *event)
{if (dragMode() == QGraphicsView::ScrollHandDrag) {// 获取鼠标位置QPointF pos = mapToScene(event->pos());// 计算鼠标移动距离QPointF delta = pos - lastMousePos;// 更新图片位置imageItem->setPos(imageItem->pos() + delta);// 更新鼠标位置lastMousePos = pos;}QGraphicsView::mouseMoveEvent(event);
}void QGraphicsView::mouseReleaseEvent(QMouseEvent *event)
{if (event->button() == Qt::LeftButton) {// 停止鼠标移动跟踪setDragMode(QGraphicsView::NoDrag);}QGraphicsView::mouseReleaseEvent(event);
}
```3. 创建一个QGraphicsScene,并将QPixmap添加到场景中。```cpp
QGraphicsScene *scene = new QGraphicsScene(this);
QPixmap pixmap("image.png");
QGraphicsPixmapItem *imageItem = scene->addPixmap(pixmap);
```4. 创建一个QGraphicsView,并将QGraphicsScene设置给它。```cpp
QGraphicsView *view = new QGraphicsView(this);
view->setScene(scene);
```通过以上步骤,就可以实现左键点击鼠标时图片跟着鼠标移动的功能。

http://www.lryc.cn/news/241627.html

相关文章:

  • 比较2个点的3种结构在不规则平面上的占比
  • 最小二乘线性回归
  • 【django+vue】连接数据库、登录功能
  • NX二次开发UF_CSYS_edit_matrix_of_object 函数介绍
  • 封装公共el-form表单
  • OpenHarmony-4.0-Release 源码编译记录
  • HTML新手入门笔记整理:块元素和行内元素
  • Hook+jsdom 解决cookie逆向
  • 【封装UI组件库系列】封装Icon图标组件
  • STM32:基本定时器原理和定时程序
  • EntityFramework 批量删除操作
  • springboot使用的设计模式
  • IP地址定位技术发展与未来趋势
  • AI与交通运输
  • window.requestAnimationFrame+localStorage+canvas实现跨窗口小球连线效果
  • 使用AndResGuard报错:copy res file not in resources.arsc file:Ezi.xml
  • 插入排序(形象类比)
  • ElasticSearch 同步的方式
  • easyExcel实现分批导入,动态表头分批导出,以及导出表格样式设置
  • Android BottomNavigationView底部菜单栏文字显示问题
  • 从零开始学习typescript——运算符(条件运算法、逻辑运算符、类型运算符、位运算)
  • 【开源】基于Vue.js的康复中心管理系统
  • 抢先看|第二届世界直播电商大会邀您共话时代“新电商”
  • 火爆火爆!影响超250万读者,Python入门圣经全新升级!
  • 大数据学习(23)-hive on mapreduce对比hive on spark
  • 通过这个简单的技巧让我们的 JavaScript 代码变得异常快
  • vue怎么实现国际化? vue-i18n 插件实现国际化,支持切换不同语言
  • rabbit MQ的延迟队列处理模型示例(基于SpringBoot延时插件实现)
  • 虽不想承认,但这就是CSGO游戏搬砖行业的现状
  • 想问问各位大佬,网络安全这个专业普通人学习会有前景吗?