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("");//重置
}

Qt 直接在控件上拖拽图片到桌面、QQ_第1张图片

你可能感兴趣的:(Qt)