首页 > 代码库 > Qt拖放功能
Qt拖放功能
mytextedit.h:
1 #ifndef MYTEXTEDIT_H 2 #define MYTEXTEDIT_H 3 4 #include <QTextEdit> 5 #include "ui_mytextedit.h" 6 #include <QUrl> 7 #include <QDropEvent> 8 #include <QMimeData> 9 #include <QString>10 #include <QDragEnterEvent>11 12 class MyTextEdit : public QTextEdit13 {14 Q_OBJECT15 16 public:17 MyTextEdit(QWidget *parent = 0);18 ~MyTextEdit();19 20 //void dragEnterEvent(QDragEnterEvent *event);21 void dropEvent(QDropEvent *event);22 23 private:24 Ui::MyTextEdit ui;25 };26 27 #endif // MYTEXTEDIT_H
mytextedit.cpp:
1 #include "mytextedit.h" 2 3 MyTextEdit::MyTextEdit(QWidget *parent) 4 : QTextEdit(parent) 5 { 6 ui.setupUi(this); 7 } 8 9 MyTextEdit::~MyTextEdit()10 {11 12 }13 14 void MyTextEdit::dropEvent(QDropEvent *event)15 {16 QList<QUrl> urls = event->mimeData()->urls();17 if (urls.isEmpty())18 {19 return;20 }21 22 //QUrl url = urls.back();23 foreach(QUrl url, urls)24 {25 QString file_name = url.toLocalFile();26 this->append(file_name);27 }28 }29 30 //void MyTextEdit::dragEnterEvent(QDragEnterEvent *event)31 //{32 // if (event->mimeData()->hasFormat("text/uri-list"))33 // event->acceptProposedAction();34 //}
上面为实现拖放文件,显示文件路径的自定义class MyTextEdit,发现函数void MyTextEdit::dragEnterEvent(QDragEnterEvent *event)注释掉但是功能没有影响,
将MyTextEdit文本框类去掉,换成QWidget类时,发现当把一个对象拖动到这个QWidget窗体上时,就会调用dragEnterEvent(),如果这个事件调用了acceptProposedAction(),就表明可以在这个窗体上拖放对象,
默认情况下窗口部件是不接受拖动的,因此,如果注释掉dragEnterEvent()函数,QWidget类上就不能实现拖放功能,qt会自动改变光标向用户说明这个窗口部件不是有效的放下点。重要的是,要在QWidget类上实现拖放,
首先需要设置setAcceptDrops(true)来接受放下事件。
如果想要在图形组件上启用拖放功能,可以使用QWidget上的setAcceptDrops()方法,设定组件接受拖放动作,在拖放动作发生时,会有相应的QDragEnterEvent、QDragMoveEvent、QDragLeaveEvent与QDropEvent等事件发生,可以重新定义dragEnterEvent()、dragMoveEvent()、dragLeaveEvent()、dropEvent()等事件处理,以处理相应的拖放事件,一般使用dragEnterEvent()和dropEvent()。
Qt拖放功能
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。