当前位置: 首页 > news >正文

qt dragEnterEvent dragLeaveEvent dragMoveEvent dropEvent都不响应的问题解决方案。

环境:vs2019+qt5.14.2

坑哦。让我搞了好久。各种不执行,最后发现,不用vs调制,直接运行exe就能接收拖拽了。

记录一下,感觉是qt的bug。上代码。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QTextEdit>class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget* parent = 0);~MainWindow();protected:void dragEnterEvent(QDragEnterEvent* e) override;void dragLeaveEvent(QDragLeaveEvent* e) override;void dragMoveEvent(QDragMoveEvent* event) override;void dropEvent(QDropEvent* e) override;private:bool readFile(const QString& fileName);QTextEdit* textEdit;
};#endif // MAINWINDOW_H
#include <QDragEnterEvent>
#include <QMimeData>
#include <QFile>
#include <QUrl>
#include <QDebug>
#include "QtWidgetsApplication5.h"MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
{//this->setMouseTracking(true); 不加也行textEdit = new QTextEdit;setCentralWidget(textEdit);textEdit->setAcceptDrops(false); setAcceptDrops(true);setWindowTitle(tr("Text Editor"));
}MainWindow::~MainWindow()
{}void MainWindow::dragEnterEvent(QDragEnterEvent* e)
{qDebug() << "dragEnterEvent" << e->mimeData();e->accept();if (e->mimeData()->hasFormat("text/uri-list"))e->acceptProposedAction(); 
}void MainWindow::dragLeaveEvent(QDragLeaveEvent* e)
{qDebug() << "dragLeaveEvent";//e->accept();  不加也行
}void MainWindow::dragMoveEvent(QDragMoveEvent* event)
{event->setDropAction(Qt::MoveAction);//event->accept(); 不加也行
}void MainWindow::dropEvent(QDropEvent* e) //释放对方时,执行的操作
{//e->accept(); 不加也行QList<QUrl> urls = e->mimeData()->urls();if (urls.isEmpty())return;QString fileName = urls.first().toLocalFile();foreach(QUrl u, urls) {qDebug() << u.toString();}qDebug() << urls.size();if (fileName.isEmpty())return;if (readFile(fileName))setWindowTitle(tr("%1 - %2").arg(fileName).arg("Drag File"));
}bool MainWindow::readFile(const QString& fileName) //读文件
{QFile file(fileName);if (!file.open(QFile::ReadOnly | QFile::Text))return false;QByteArray data;data = file.readAll();textEdit->setText(QString::fromLocal8Bit(data));return true;
}
#include "QtWidgetsApplication5.h"
#include <QtWidgets/QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

运行结果:

http://www.lryc.cn/news/362741.html

相关文章:

  • LVS精益价值管理系统 DownLoad.aspx 任意文件读取漏洞复现
  • 【GIC400】——中断使能
  • 容器项目之前后端分离
  • 游戏心理学Day04
  • 文件上传漏洞之upload-labs
  • 解决使用gets(getchar)函数无法输入字符(字符串)和scanf_s函数显示缺少“scanf_s”整型参数的问题
  • Excel的VLOOKUP函数的用法
  • 【Java面试】十三、ArrayList相关
  • 网络简史-基于图论的网络
  • Git工作机制,暂存区,本地库,远程库管理,常用命令
  • 找不到steam_api64.dll,无法继续执行的原因及解决方法
  • 鸿蒙开发接口定制管理:【@ohos.enterpriseDeviceManager (企业设备管理)】
  • Pytorch实用教程:多分类任务中使用的交叉熵损失函数nn.CrossEntropyLoss
  • 智慧冶金:TSINGSEE青犀AI+视频技术助力打造高效、安全的生产环境
  • 【ARM+Codesys案例】基于全志T3+Codesys软PLC的3C点胶边缘控制解决方案:整合了运动控制、视觉、激光测高等技术
  • 描述JSP的内置对象
  • MongoDB CRUD操作:可重试写入
  • Microsoft Outlook Lite 引入短信功能
  • Redis的数据结构以及对应的使用场景
  • Vue中如何获取dom元素?
  • 前端最新面试题(基础模块HTML/CSS/JS篇)
  • matlab模拟太阳耀斑喷发
  • WebStorm 2024.1.1 Mac激活码 前端开发工具集成开发环境(IDE)
  • 多项目的.net core解决方案(项目间引用)如何使用Docker部署
  • 使用raise语句抛出异常
  • vue组件中data为什么必须是一个函数?
  • 10-Django项目--Ajax请求
  • 二进制安装Prometheus
  • Git配置SSH-Key
  • 处理多语言文案的工具