博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
qt下拖放(一)
阅读量:4519 次
发布时间:2019-06-08

本文共 1353 字,大约阅读时间需要 4 分钟。

 

参考资料是C++ GUI Qt4 编程(第二版)

 

1.拖放操作分为两个截然不同的动作: 拖动和放下.

拖动通过void dragEnterEvent(QDragEnterEvent * event);来实现。

 

放下通过void dropEvent(QDropEvent * event);来实现。

需要注意的一个地方是:

默认情况下,QTextEdit可以接受来自其他应用程序文本的拖动,并且如果用户在它上面拖放下一个文件,它会把这个文件的文件名放到QTextEdit的文本框中.

所以当我们使用拖放的时候,应该先禁用QTextEdit的可拖放.

this->textEdit->setAcceptDrops(false);this->mainWindow->setAcceptDrops(true);

2.当用户把一个对象拖动到这个指定窗口上时,应付调用dragEnterEvent.如果对这个事件调用acceptProposedAction(),就表明用户可以在这个窗口部件上拖放对象。

    默认情况下,窗口部件是不接受拖动的。Qt会自动改变光标来向用户说明这个窗口部件是不是有效的放下点。

void Test::dragEnterEvent(QDragEnterEvent *ev){
if(ev->mimeData()->hasFormat("text/uri-list")) ev->acceptProposedAction();}

这个地方有个问题,首先看下书本上是怎么说的:

MIME类型中的text/uri-list用于存储一系列的统一资源标识符(Universal Resource Identifier,URI), 它们可以是文件名、统一资源定位器(Uniform Resource Locator,URL,如HTTP或者FTP路径),或者其它全局资源标识符。

但是这个地方,并不能使用text/plain来判断txt文件 用image/jpeg来判断图片。

因为通过下面的代码,可以发现jpeg格式的图片返回fromat也是text/uri-list.

qDebug()<
mimeData()->formats();

而且debug显示的也没有image/jpeg

这个是我不能理解的,这也就是说,在dragEnterEvent中只能判断到是不是文件,而不能判断到类型。不知道我的判断是不是正确的。

3.当用户在窗口部件上放下一个对象时,就会调用dropEvent.

void Test::dropEvent(QDropEvent *ev){    QList
urls = ev->mimeData()->urls(); QString filename = urls.first().toLocalFile(); this->fnames = filename; this->readFile(fnames);}

 

转载于:https://www.cnblogs.com/justwake/archive/2013/06/16/3138907.html

你可能感兴趣的文章
canvas刮奖
查看>>
javascript 模拟滚动 隐藏滚动条
查看>>
手把手教你使用 Clion 开发 Linux C++ 项目
查看>>
阿里巴巴卖空阿里巴巴入股新浪微博抑制投资者卖空行为
查看>>
分析打开hdu 3335 (最小路径覆盖)
查看>>
添加源ubuntu_x64 安装 Adobe Reader
查看>>
NFS-heartbeat-drbd模拟NFS高可用
查看>>
SQL Server性能调优:资源管理之内存管理篇(上)
查看>>
javaScript 基础知识
查看>>
接近开关,光耦
查看>>
基于visual Studio2013解决C语言竞赛题之1033数字交换
查看>>
给datalist加自动编号(解决博客的第XX楼)
查看>>
BZOJ3282: Tree (LCT模板)
查看>>
ES6中变量的解构赋值
查看>>
编译器C-Free V352注册算法分析
查看>>
数据绑定控件Reperter
查看>>
【codeforces】【比赛题解】#937 CF Round #467 (Div. 2)
查看>>
剑指Offer学习笔记(3)——解决面试题的思路
查看>>
.NET Framework基础知识(二)(转载)
查看>>
Yii DataProvider
查看>>