Qt 直接在控件上拖拽图片到桌面、QQ

通过本地url进行图片传输

void Vision::onDrapImage() //自定义的拖拽事件
{
	QPixmap pixmap("./test.bmp"); //待拖拽的图片(请自行修改)
	QString filename = listView->model()->index(handle, 0).data().toString() + ".jpg"; //保存图片名(请自行修改)
	filename = filename.remove(QRegExp("[\\s\\\\/:\\*\\?\\\"<>\\|]")); //去除windows路径不支持的符号
	filename = QCoreApplication::applicationDirPath() + "/" + filename; //绝对路径
	if (filename.isEmpty())return;
	QMimeData *mimeData = new QMimeData;
	pixmap.save(filename);//将图片临时存储到程序目录下
	QUrl url;
	url.setUrl("file:///" + filename);//本地文件url
	mimeData->setUrls(QList<QUrl>() << url);
	QDrag* drag = new QDrag(this);//拖拽控件
	drag->setMimeData(mimeData);//加载数据
	drag->setPixmap(pixmap.scaled(64, 64));//拖拽时的图标设置
	drag->exec(Qt::MoveAction | Qt::CopyAction | Qt::LinkAction, Qt::CopyAction);//运行拖拽事件直至事件结束,设置拖拽支持动作
	
	//类的QTimer定时器
	timer->setObjectName(filename); //载入文件名
	QObject::connect(timer, &QTimer::timeout, this, &Vision::onRemoveTemporary);//连接定时槽
	timer->setInterval(1000);//设置1s时间
	timer->start();//开始计时
}

void Vision::onRemoveTemporary() //槽函数
{
	QFile::remove(timer->objectName());//删除临时图像文件
	QObject::disconnect(timer, &QTimer::timeout, 0, 0);//断开信号和槽
	timer->setObjectName("");//重置
}

在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Qt中的QGraphicsView和QGraphicsScene类来实现将件覆盖在图片上的效果。具体步骤如下: 1. 创建一个QGraphicsScene对象,将图片添加到场景中。 2. 创建一个QGraphicsView对象,将其设置为透明的,并将其场景设置为上一步创建的场景。 3. 将需要覆盖在图片上的件添加到场景中,可以使用QGraphicsProxyWidget类将普通件转换为图形项。 4. 设置QGraphicsView对象的大小和位置,使其覆盖在图片上。 以下是示例代码: ```python import sys from PyQt5.QtWidgets import QApplication, QGraphicsScene, QGraphicsView, QPushButton, QGraphicsProxyWidget from PyQt5.QtGui import QPixmap if __name__ == '__main__': app = QApplication(sys.argv) # 创建场景和视图 scene = QGraphicsScene() view = QGraphicsView(scene) view.setStyleSheet("background: transparent; border: none;") # 设置为透明 # 添加图片 pixmap = QPixmap("image.jpg") scene.addPixmap(pixmap) # 添加件 button = QPushButton("Click me") proxy = QGraphicsProxyWidget() proxy.setWidget(button) scene.addItem(proxy) # 设置视图大小和位置 view.resize(pixmap.width(), pixmap.height()) view.move(100, 100) view.show() sys.exit(app.exec_()) ``` 在上述示例中,我们创建了一个场景和视图,并将一张图片添加到场景中。接着,我们创建了一个QPushButton件,并使用QGraphicsProxyWidget将其转换为图形项,并添加到场景中。最后,我们设置了视图的大小和位置,使其覆盖在图片上。运行程序后,即可看到按钮件覆盖在图片上的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值