您当前的位置: 首页 >  qt

txwtech

暂无认证

  • 1浏览

    0关注

    813博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

QT拖放事件_拖入文本文件读取内容方法

txwtech 发布时间:2022-09-03 16:31:36 ,浏览量:1

在窗体启用拖放功能,可以使用QWidget上所继承下来的setAcceptDrops()方法,设定组件接受拖放动作,在拖放动作发生时,会 有相对应的QDragEnterEvent、QDragMoveEvent、QDragLeaveEvent与QDropEvent等事件发生,您可以重 新定义dragEnterEvent()、dragMoveEvent()、dragLeaveEvent()与dropEvent()等事件处理者,以 处理相对应的拖放事件,通常会使用的是dragEnterEvent()与dropEvent()。

setAcceptDrops(true)设定接受拖放,当图片档案被拖入组件时,发生QDragEnterEvent并分派 给dragEnterEvent()处理。QDragEnterEvent的mimeData()方法传回QMimeData,当中包括了MIME (Multipurpose Internet MailExtensions)类型的相关信息,hasFormat("text/uri-list")测试是否含有文字信息的URI(Universal Resource Identifier),也可以使用hasUrls()来进行同样的测试。 当拖放行为开始执行时,执行拖放行为的一方会需要知道接受放置的另一方接受何种操作,例如拖放档案时,当拖放完成时,原档案是被复制或移动。执行拖放行为的一方会设定可被接受的动作,而接受放置的一方可选择接受何种动作,并传回相关信息给执行方,acceptProposedAction()的作用为接受执行拖放行为的一方所设定的预设动作。  

有些组件默认即接受拖放行为,例如QLineEdit,您可以直接将文字拖曳至QLineEdit,这会将拖曳的文字置放至您置放的位置,若您想改变这个 行为,可以设定QLineEdit的setAcceptDrops()为false,然后设定其父组件的setAcceptDrops()为true,让 拖放事件传播至父组件,由父组件来处理拖放相关事件,以改变QLineEdit的预设拖放行为,例如让纯文本档案拖至QLineEdit时,可以自动加载 文字至QLineEdit中。

创建窗口程序-拖入textEdit

 

#ifndef MAINWINDOW_MYDRAGDROP_H
#define MAINWINDOW_MYDRAGDROP_H

#include 

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow_mydragdrop; }
QT_END_NAMESPACE

class MainWindow_mydragdrop : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow_mydragdrop(QWidget *parent = nullptr);
    ~MainWindow_mydragdrop();

private:
    Ui::MainWindow_mydragdrop *ui;
protected:
    void dragEnterEvent2(QDragEnterEvent *drag_event);//拖入--不要更换名字--拖入不会触发重新改名的函数---无用
    void dragReleaseEvent2(QDropEvent *release_event);//释放事件-不要更换默认名字--拖入不会触发重新改名的函数---无用

    void dragEnterEvent(QDragEnterEvent *event);//拖入--系统默认的名字--拖动生效
    void dropEvent(QDropEvent *event);//释放事件--系统默认的名字--拖动生效
};
#endif // MAINWINDOW_MYDRAGDROP_H
#include "mainwindow_mydragdrop.h"
#include "ui_mainwindow_mydragdrop.h"
#include 
#include 
#include 
#include 
#include 
#include 

MainWindow_mydragdrop::MainWindow_mydragdrop(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow_mydragdrop)
{
    ui->setupUi(this);


    setAcceptDrops(true);
}

MainWindow_mydragdrop::~MainWindow_mydragdrop()
{
    delete ui;
}

void MainWindow_mydragdrop::dragEnterEvent(QDragEnterEvent *event)
{

   if(event->mimeData()->hasUrls())//数据中是否包含URL
   {
       event->acceptProposedAction();//接受动作
   }
   else
   {
       event->ignore();//忽略该事件
       qDebug()setText("1a");
    const QMimeData * q_mimedata=event->mimeData();//获取MIME的数据
    if(q_mimedata->hasUrls())
    {
        QList url_list= q_mimedata->urls(); //获取URL列表
        foreach(QUrl aa,url_list)
        {
            qDebug()setText(in.readAll());//读取流对象的内容
        }
        else
        {
            qDebug()hasUrls())//数据中是否包含URL
    {
        drag_event->acceptProposedAction();//接受动作
    }
    else
    {
        drag_event->ignore();//忽略该事件
    }
}

void MainWindow_mydragdrop::dragReleaseEvent2(QDropEvent *release_event)//释放事件
{
    ui->textEdit->setText("1a");
    const QMimeData * q_mimedata=release_event->mimeData();//获取MIME的数据
    if(q_mimedata->hasUrls())
    {
        QList url_list= q_mimedata->urls(); //获取URL列表
        foreach(QUrl aa,url_list)
        {
            qDebug()setText(in.readAll());//读取流对象的内容
        }
    }
}

关注
打赏
1665060526
查看更多评论
立即登录/注册

微信扫码登录

0.0828s