Qt: QDropEvent拖拽事件,拖拽打开文件

源码下载地址: http://download.csdn.net/detail/rl529014/9681291                              

Qt,C++ 学习交流群: 302558294(欢迎你的加入)


需求:

通过鼠标拖拽文本文件到应用程序,打开文本文件,读出其中的内容,显示到窗口中。


效果图:



主要思路:

1、重写 void dragEnterEvent(QDragEnterEvent *e);    void dropEvent(QDropEvent *e);

2、根据获取的文件名,打开文件,读文件。


源代码:

main.cpp

#include 
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    MainWindow w;
    w.show();

    return a.exec();
}

mainwindow.h

#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);
    void dropEvent(QDropEvent *e);

private:
    bool readFile(const QString &fileName);
    QTextEdit *textEdit;
};

#endif // MAINWINDOW_H


mainwindow.cpp

#include 
#include 
#include 
#include 
#include 
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
    textEdit = new QTextEdit;
    setCentralWidget(textEdit);

    textEdit->setAcceptDrops(false); //禁用textEdit控件的放下操作
    setAcceptDrops(true);//启用textEdit控件的放下操作

    setWindowTitle(tr("Text Editor"));
}

MainWindow::~MainWindow()
{

}

void MainWindow::dragEnterEvent(QDragEnterEvent *e)
{
    if(e->mimeData()->hasFormat("text/uri-list")) //只能打开文本文件
        e->acceptProposedAction(); //可以在这个窗口部件上拖放对象
}

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

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

    foreach (QUrl u, urls) {
        qDebug()<setText(QString::fromLocal8Bit(data));
    return true;
}

你可能感兴趣的:(Qt编程)