QT上实现文件拖拽功能
转自于QT上实现文件拖拽功能声明dragEnterEvent和dropEvent事件函数,对窗口的拖拽行为进行处理// 由MainWindow来截取拖拽事件①ui->lineEdit->setAcceptDrops(false);②this->setAcceptDrops(true);注: 第①很关键,笔者在Linux和Windows用相同的代码出现了一个小bug...
·
- 声明dragEnterEvent和dropEvent事件函数,对窗口的拖拽行为进行处理
// 由MainWindow来截取拖拽事件
①ui->lineEdit->setAcceptDrops(false);
②this->setAcceptDrops(true);
注: 第①很关键,笔者在Linux和Windows用相同的代码出现了一个小bug,子组件和父组件setAcceptDrops(都为true),会导致这两个平台有差异性。
在Linux平台下,子组件acceptDrops为ture的情况下,MainWindow来截取拖拽事件不起作用。
void dragEnterEvent(QDragEnterEvent *event);
void dropEvent(QDropEvent *event);
ui->lineEdit->setAcceptDrops(false);
this->setAcceptDrops(true);
// 拖拽处理函数
void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
#if 1
// 判断拖拽文件类型,文件名 接收该动作
if (event->mimeData()->hasFormat("text/uri-list")) {
event->acceptProposedAction();
}
#endif
}
// 拖拽释放处理函数
void MainWindow::dropEvent(QDropEvent *event)
{
#if 1
QList<QUrl> urls = event->mimeData()->urls();
if (urls.isEmpty()) {
return;
}
QString fileName = urls.first().toLocalFile();
if (fileName.isEmpty()) {
return;
}
ui->lineEdit->setText(fileName);
#endif
}
更多推荐
已为社区贡献4条内容
所有评论(0)