帮朋友写了一个小工具
是将txt文件,里面有很多这种数据,数据为
037 038 064 069 074 079 087 088 112 115 116 120 142 145 146 150 152 155
将数据+1,超过三位数的不予处理,999不予+1。
功能很简单,但是不想进行选文件,嫌费事啊,想把文件拖拽到软件里面。
研究了下Qt的拖拽
鼠标 点击 send widget 时候 会触发mousePressEvent
按压鼠标 移动的过程中 会触发mouseMoveEvent
拖拽鼠标进入窗口 recv widget 会触发 dragEnterEvent
松开鼠标 会触发dropEvent
大家看一个例子,做动txt文本到窗口,如下动图,看qt的输出窗口。拖拽放开打印Drop,来回移动不放开打印DragEnter和DragLeave
在.h中,主要这三个函数
protected:
void dragEnterEvent(QDragEnterEvent *event);
void dropEvent(QDropEvent *event);
void dragLeaveEvent(QDragLeaveEvent *event);
.c
void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
qDebug() << __FILE__ << __LINE__ << "DragEnter!";
//如果为文件,则支持拖放
if (event->mimeData()->hasFormat("text/uri-list"))
{
event->acceptProposedAction();
}
}
void MainWindow::dropEvent(QDropEvent *event)
{
qDebug() << __FILE__ << __LINE__ << "Drop!";
//注意:这里如果有多文件存在,意思是用户一下子拖动了多个文件,而不是拖动一个目录
//如果想读取整个目录,则在不同的操作平台下,自己编写函数实现读取整个目录文件名
QList<QUrl> urls = event->mimeData()->urls();
if(urls.isEmpty())
return;
//往文本框中追加文件名
foreach(QUrl url, urls)
{
QString m_fileName = url.toLocalFile();
ui->lineEdit->setText(m_fileName);
}
}
void MainWindow::dragLeaveEvent(QDragLeaveEvent *event)
{
qDebug() << __FILE__ << __LINE__ << "Drag Leave";
}
需要设置
setAcceptDrops(true); //接受拖拽
demo的源码:
https://download.csdn.net/download/linbounconstraint/12651508
源码