环境:vs2019+qt5.14.2

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

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

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 

class MainWindow : public QMainWindow
{
	Q_OBJECT

public:
	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 
#include 
#include 
#include 
#include 
#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" <mimeData();
	e->accept();
	if (e->mimeData()->hasFormat("text/uri-list"))
		e->acceptProposedAction(); 
}

void MainWindow::dragLeaveEvent(QDragLeaveEvent* e)
{
	qDebug() <accept();  不加也行
}

void MainWindow::dragMoveEvent(QDragMoveEvent* event)
{
	event->setDropAction(Qt::MoveAction);
	//event->accept(); 不加也行
}

void MainWindow::dropEvent(QDropEvent* e) //释放对方时,执行的操作
{
	//e->accept(); 不加也行
	QList urls = e->mimeData()->urls();
	if (urls.isEmpty())
		return;

	QString fileName = urls.first().toLocalFile();

	foreach(QUrl u, urls) {
		qDebug() << u.toString();
	}
	qDebug() <setText(QString::fromLocal8Bit(data));
	return true;
}
#include "QtWidgetsApplication5.h"
#include 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

运行结果:

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

本站无任何商业行为
个人在线分享 » qt dragEnterEvent dragLeaveEvent dragMoveEvent dropEvent都不响应的问题解决方案。
E-->