QT::拖放事件
Drag拖操作 Drop放操作 将文件拖进TextEdit中,TextEdit自动打开文件读取内容到TextEdit中。 1、数据拖动时会被存储在MIME(Multipurpose internet Mail Extensions)中。 2、在QT中使用QMimeData来表示MIME数据,并使用QDraw来完成数据的转换, 3、而拖放操作都在鼠标事件中完成。
MIME型处理函数 测试函数: hasText() hasHtml() hasUrls() hasImage() hasColor() 获取函数: text() html() urls() imageData() colordata() 设置函数: MIME类型: settext() text/plain sethtml() text/html seturls() text/url-list setimageData() image/* setcolordata() application /x-color
1、鼠标拖入一个数据进入主窗口时,会触发dragEnterEvent处理事件。获取MIME数据。 2、查看是否有url路径(拖入文本文件实质是拖入它的路径)。 3、当松开左键时,数据放入主窗口时,会触发dropEvent事件。 4、获取MIME里的列表,拖入只有一个文件,所以获取列表中的第一个条目。并使用toLocalFile()转换为本地路径。 5、使用QFile和QTextStream将文件中的数据读入编辑器中。
void MainWindow::dragEnterEvent(QDragEnterEvent *e) { if(e->mimeData()->hasUrls())//数据是否包含URL。 e->acceptProposedAction();//如果是则接收动作。 else e->ignore();//如果不是则忽略。 } void MainWindow::dropEvent(QDropEvent *e) { const QMimeData *mimi = e->mimeData();//获取mime数据。 if(mimi->hasUrls()) //如果数据包中url { QList<QUrl>urlList = mimi->urls();//获取URL列表 QString fileName = urlList.at(0).toLocalFile(); if(!fileName.isEmpty()) { QFile file(fileName); //建立QFile对象,并以只读的方式打开。 if(file.open(QIODevice::ReadOnly)) return; QTextStream in(&file); //建立文本流对象。 ui->textEdit->setText(in.readAll()); } } }