Qt实现图片可拖拉

简介: Qt实现图片可拖拉

看标题可能比较迷惑,我也是实在不知道起什么好了。看一下效果图吧:

就是你可以从左边的list中拖一个元素到右边。

我做这个例子其实最开始是为了区分drag和drop事件,那就先来看下吧:

从左边拖了一个元素到右边,看程序输出,各个事件的功能便一目了然。

来简单介绍一下小程序整体:

左边是一个QListWidget,包含QListWidgetItem,右边是一个QGraphicsView,QGraphicsView来展示QGraphicsScene,它们是这样一种关系:

CustomScene *pCustomScene = new CustomScene();
ui->graphicsView->setScene(pCustomScene);

其中CustomScene继承自QGraphicsScene,本质还是QGraphicsScene。

左边的QListWidget支持拖拉,当它的元素被拖到QGraphicsScene后,通过dropEvent来处理事件:

void CustomScene::dropEvent(QGraphicsSceneDragDropEvent *pEvent)
{
    qDebug() << __FUNCTION__;
    if (pEvent->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) {
        QListWidget *pListwidget = qobject_cast<QListWidget *>(pEvent->source());
        QString strPixmapPath = ":/images/" + pListwidget->currentItem()->text() + ".png";
        QGraphicsPixmapItem *pPixmapItem = new QGraphicsPixmapItem(QPixmap(strPixmapPath));
        pPixmapItem->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
        pPixmapItem->setPos(pEvent->scenePos());
        addItem(pPixmapItem);
    }
}

读取到拖拉的item后,拼接一个pixmapPath,然后new QGraphicsPixmapItem 最终添加到scene中。

嗯,就是这样。

需要注意的是,需要设置scene的矩形和view的矩形一致,即:

ui->graphicsView->setSceneRect(ui->graphicsView->rect());

否则,当拖动两个元素到scene中,移动其中一个,另个一会跟着移动,很难受。

其次在添加元素到scene中时,需要指定pos,即:

pPixmapItem->setPos(pEvent->scenePos());

否则添加的item始终在中心位置。

源代码地址(包含可执行程序)

欢迎下载试玩!

相关文章
|
6月前
|
计算机视觉 C++
基于Qt的简易图片浏览器设计与实现
基于Qt的简易图片浏览器设计与实现
297 1
|
6月前
|
存储 容器
QT中QListWidget实现QListWidgetItem图片和文字居中
在使用QT开发软件的过程中,很多时候使用QListWidget来实现列表项的功能,比如MS系统的功能模块菜单,如下面2张图所示,其中第一张图是带文字和图标的列表项,第二张图是纯图标的模式,在最近开发的平台客户端的某个功能模块都用上了。
1016 0
|
4月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
181 1
Qt(C++)开发一款图片防盗用水印制作小工具
|
3月前
|
计算机视觉
使用QT显示OpenCV读取的图片
使用QT显示OpenCV读取的图片
72 1
|
5月前
Qt绘图(线条、椭圆、矩形、图片滚动)
Qt绘图(线条、椭圆、矩形、图片滚动)
354 3
|
5月前
|
算法 计算机视觉
【Qt&OpenCV QGraphicsView显示OpenCV读入的图片】
【Qt&OpenCV QGraphicsView显示OpenCV读入的图片】
75 0
|
6月前
|
存储 C++ 开发者
QT基础【4-简易的图片查看程序】
QT基础【4-简易的图片查看程序】
|
6月前
Qt鼠标悬浮在图片上显示删除字样
Qt鼠标悬浮在图片上显示删除字样
|
C++ 计算机视觉 Python
vs qt opencv c++图片相片查看编辑工具Image Viewer Image Editer
vs qt opencv c++图片相片查看编辑工具Image Viewer Image Editer
216 0
|
Linux
荔枝派Zero(全志V3S)基于QT实现在LCD显示图片
有这样一个需求,通过配置 QT,在 linux 下实现显示我所想要显示的图片,实现的方式是我可以在命令行将图片的路径作为入参传入进去,从而对其进行显示,在之前的文章中已实现了在板子上运行 QT5 程序,此需求要自己写个 QT 程序,且需要对 buildroot 进行裁剪支持一些常用的图片格式即可。
350 2