原创

Qt拖拽的小Demo

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://shazhenyu.blog.csdn.net/article/details/79527061

效果图:


思路如下:

1、在构造函数中设置拖拽可用,setAcceptDrops(true);

2、在拖的时候获取信息,拽的时候做处理(处理时已去除重复文件):

void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
    if(event->mimeData()->hasFormat("text/uri-list")) {
        event->acceptProposedAction();
    }
    qDebug() << "drag enter";
}

void MainWindow::dropEvent(QDropEvent *event)
{
    QList<QUrl> urls = event->mimeData()->urls();
    if(urls.isEmpty()) {
        return;
    }
    foreach(QUrl url, urls) {
        QString file_all_name = url.toLocalFile();
        if(!m_fileList.contains(file_all_name)) {
            m_fileList << file_all_name;
            QString fileName = file_all_name.split("/").last();
            int w = 300;
            int h = 100;
            QPushButton *btn = new QPushButton(this);
            btn->resize(w,h);
            btn->move((1-m_fileList.count()%2)*w, (m_fileList.count() - 1)/2*h + ui->label->height());
            btn->setText(fileName);
            btn->setStyleSheet("background-color: rgb(170, 255, 255);");
            connect(btn, &QPushButton::clicked, [=](){
                for(int i = 0; i < m_fileList.count(); i++) {
                    QString tmp = m_fileList.at(i);
                    if(tmp.split("/").last() == btn->text()) {
                        ui->label->setText(tmp);
                    }
                }
            });
            btn->show();
        }
    }
}

3、还可以做的小优化:

①、可以在点击按钮时,不是简单的显示路径,而是打开此文件。

②、可以加图片处理,根据不同的文件类型用不同的UI显示。

……

文章最后发布于: 2018-03-12 15:12:51
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 代码科技 设计师: Amelia_0503

分享到微信朋友圈

×

扫一扫,手机浏览