QT 拖拽事件

在看QT的torrent例程时,发现其有拖拽相关代码,效果却没有 (QTreeWidget),琢磨后总结如下:

1.首先在构造函数里

TorrentView::TorrentView(QWidget *parent)
    : QTreeWidget(parent)
{
//#if QT_CONFIG(draganddrop)
    setAcceptDrops(true);
//#endif
}

2.添加drop相关事件

protected:
    void dragMoveEvent(QDragMoveEvent *event) ;
    void dropEvent(QDropEvent *event) ;

    void dragEnterEvent(QDragEnterEvent *e);
    void dragLeaveEvent ( QDragLeaveEvent * e );
//在dragEnterEvent里添加这个是关键
void TorrentView::dragEnterEvent(QDragEnterEvent *e)
{
    if(e->mimeData()->hasFormat("text/uri-list")) //只能打开文本文件
        e->acceptProposedAction(); //可以在这个窗口部件上拖放对象
}

void  TorrentView::dragLeaveEvent ( QDragLeaveEvent * e )
{
}

void TorrentView::dragMoveEvent(QDragMoveEvent *event)
{

    qDebug()<<"dragmove";

    // Accept file actions with a '.torrent' extension.
    QUrl url(event->mimeData()->text());
    if (url.isValid() && url.scheme() == "file"
            && url.path().toLower().endsWith(".torrent"))
        event->acceptProposedAction();
}

void TorrentView::dropEvent(QDropEvent *event)
{
    // Accept drops if the file has a '.torrent' extension and it
    // exists.


    qDebug()<<"drop";
    //注意这里从本地文件托过去的话,格式为 file:///c:/..,用Path获取的话是 "/C:/..."
    //QString fileName = QUrl(event->mimeData()->text()).path();
    //用tolocalFile
    QString fileName = QUrl(event->mimeData()->text()).toLocalFile();
    if (QFile::exists(fileName) && fileName.toLower().endsWith(".torrent"))
        emit fileDropped(fileName);
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值