QT的拖拽程序示例(自定义格式)
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(); //能够在这个窗口部件上拖放对象 if(e->mimeData()->hasFormat("application/x-dnditemdata0")) { //自定义的MIME类型 e->acceptProposedAction(); qDebug() << "enter"; } } void MainWindow::dropEvent(QDropEvent *e) //释放对方时,执行的操做 { qDebug() << "haha"; QString txt = e->mimeData()->text(); qDebug() << "is:" << txt; 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; }