QT拖拽功能简介: http://blog.youkuaiyun.com/pcsuite/article/details/6147191
http://blog.youkuaiyun.com/xie376450483/article/details/5838892
http://blog.youkuaiyun.com/xie376450483/article/details/5839058
QMimeData类:http://blog.youkuaiyun.com/xie376450483/article/details/5863810
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtGui>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
void dragEnterEvent(QDragEnterEvent *event);
void dropEvent(QDropEvent *event);
private:
bool readFile(const QString &fileName);
QTextEdit *textEdit;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
textEdit = new QTextEdit;
setCentralWidget(textEdit);
textEdit->setAcceptDrops(false); //关闭QTextEdit的拖放接收
setAcceptDrops(true); //打开主窗口的拖放接收
setWindowTitle(tr("Text Editor"));
}
MainWindow::~MainWindow()
{
}
void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
if (event->mimeData()->hasFormat("text/uri-list")) { //检测事件的mimeData
event->acceptProposedAction();
}
}
void MainWindow::dropEvent(QDropEvent *event)
{
QList<QUrl> urls = event->mimeData()->urls();
if (urls.isEmpty()) {
return;
}
QString fileName = urls.first().toLocalFile();
if (fileName.isEmpty()) {
return;
}
if (readFile(fileName)) {
setWindowTitle(tr("%1 - %2").arg(fileName, tr("Drag File")));
}
}
bool MainWindow::readFile(const QString &fileName)
{
bool r = false;
QFile file(fileName);
QTextStream in(&file);
if(file.open(QIODevice::ReadOnly|QFile::Text)) {
textEdit->setText(in.ReadAll());
r=true;
}
return r;
}
main.cpp
#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}