Qt 拖动事件


在这里插入图片描述

QEvent::DragEnter

当拖动文件进入到窗口/控件中时,触发该事件,它对应的子类是QDragEnterEvent

QEvent::DragLeave

当拖动文件离开窗口/控件时,触发该事件,它对应的子类是QDragLeaveEvent

QEvent::DragMove

当拖动文件在窗口/控件中移动时,触发该事件,它对应的子类是QDragMoveEvent

QEvent::Drop

当拖动文件在窗口/控件中移动时,触发该事件,它对应的子类是QDragMoveEvent

1 自定义控件 TextEdit

自定义一个标签控件TextEditx,让它继承自QTextEdit,然后重写拖放相关的函数。

添加自定义控件类TextEditX ,在 texteditx.h 文件中

// TextEditX.h
protected:
    // 重写父类的方法
    void dragEnterEvent(QDragEnterEvent *e);
    void dragMoveEvent(QDragMoveEvent *e);
    void dragLeaveEvent(QDragLeaveEvent *e);
    void dropEvent(QDropEvent *e);

texteditx.cpp 文件中

// TextEditX.cpp
TextEditX::TextEditX(QWidget *parent) : QTextEdit{parent} {
    // 部件将接受鼠标拖放事件
    this->setAcceptDrops(true);
}

void TextEditX::dragEnterEvent(QDragEnterEvent *e) {
    qDebug() << "dragEnterEvent";
    // 默认情况下,窗口部件不接受拖动
    e->acceptProposedAction();
}

void TextEditX::dragMoveEvent(QDragMoveEvent *e) {
    qDebug() << "dragMoveEvent";
}

void TextEditX::dragLeaveEvent(QDragLeaveEvent *e) {
    qDebug() << "dragLeaveEvent";
}

void TextEditX::dropEvent(QDropEvent *e) {
    qDebug() << "dropEvent";
}

2 实现打开文件功能

texteditx.cpp文件中

// texteditx.cpp
void TextEditX::dropEvent(QDropEvent *e) {
    qDebug() << "dropEvent";
    QList<QUrl> urls = e->mimeData()->urls();
    if (urls.isEmpty()) {
        return;
    }
    // 获取这个文件名
    QString fileName = urls.first().toLocalFile();
    qDebug() << urls.first() << "\n" << fileName;

    // 打开文件
    QFile file(fileName);

    // 打开失败返回 false
    if (file.open(QIODevice::ReadOnly)) {
        setPlainText(file.readAll());
    }
}

3 实现鼠标滚轮放大字体

texteditx.h 文件中

protected:
    // 重写滚轮事件
    void wheelEvent(QWheelEvent *e);

texteditx.cpp 文件中

void TextEditX::wheelEvent(QWheelEvent *e) {
    if (QApplication::keyboardModifiers() == Qt::ControlModifier) {
        if (e->angleDelta().y() > 0) {
            // 滚轮远离使用者, 进行放大
            this->zoomIn();
        } else {
            // 滚轮靠近使用者, 进行缩小
            this->zoomOut();
        }
    } else {
        // 调用父类的实现, 否则无法实现文本的上下滚动
        QTextEdit::wheelEvent(e);
    }
}

相关推荐

  1. <span style='color:red;'>Qt</span> <span style='color:red;'>事件</span>

    Qt 事件

    2024-03-10 16:32:02      18 阅读
  2. <span style='color:red;'>Qt</span> <span style='color:red;'>事件</span>

    Qt 事件

    2024-03-10 16:32:02      12 阅读
  3. Qt事件

    2024-03-10 16:32:02       9 阅读
  4. QT——事件

    2024-03-10 16:32:02       9 阅读
  5. <span style='color:red;'>Qt</span> <span style='color:red;'>事件</span>

    Qt 事件

    2024-03-10 16:32:02      8 阅读
  6. qt,滚动条,放大缩小拖动图片

    2024-03-10 16:32:02       40 阅读
  7. Qt无边框窗口可拖动

    2024-03-10 16:32:02       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-10 16:32:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-10 16:32:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-10 16:32:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-10 16:32:02       18 阅读

热门阅读

  1. MapReduce-Join多种应用

    2024-03-10 16:32:02       20 阅读
  2. MySQL中UNION和UNION ALL的区别

    2024-03-10 16:32:02       19 阅读
  3. 云计算高级课程作业

    2024-03-10 16:32:02       20 阅读
  4. CentOS 8使用笔记

    2024-03-10 16:32:02       18 阅读
  5. CCF-CSP真题201403-2《窗口》(结构体+数组)

    2024-03-10 16:32:02       17 阅读
  6. misc40

    misc40

    2024-03-10 16:32:02      19 阅读
  7. python实现回溯算法

    2024-03-10 16:32:02       21 阅读
  8. Svelte之基础知识一

    2024-03-10 16:32:02       24 阅读
  9. 读书·基于RISC-V和FPGA的嵌入式系统设计·第3章

    2024-03-10 16:32:02       21 阅读