• 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 QTextEdit
    13 {
    14     Q_OBJECT
    15 
    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()。

  • 相关阅读:
    兼容ie6的mvvm框架--san
    Parsing error: The keyword 'export' is reserved && error Parsing error: Unexpected token <
    Call to undefined function openssl_decrypt()
    css 陌生属性
    获取url
    relative 和 absolute
    SSL certificate problem: unable to get local issuer certificate 的解决方法
    使用wamp扩展php时出现服务未启动的解决方法
    php判断是不是移动设备
    js:不是空字符串的空字符串引起的bug
  • 原文地址:https://www.cnblogs.com/Jace-Lee/p/5848825.html
Copyright © 2020-2023  润新知