Qt 接受拖放

第一步:在构造函数里面 添加拖放支持,相当于总开关(注意这里设置之后是整个窗口可以接受拖放)

setAcceptDrops(true);

第二步:重写接受拖放相关的虚函数

void dragEnterEvent(QDragEnterEvent* event);
void dragMoveEvent(QDragMoveEvent* event);
void dragLeaveEvent(QDragLeaveEvent* event);
void dropEvent(QDropEvent* event);

第三步:实现以上虚函数,并在 dragEnterEvent 函数里面 过滤拖进来的内容

// 有东西被拖进来(拖着,未松开鼠标)
void QtTest::dragEnterEvent(QDragEnterEvent* event)
{
    // 拖进来的东西属于哪种内容保存在formats里面
    QStringList formats = event->mimeData()->formats();
    for (int i = 0; i < formats.size(); i++)
    {
        qDebug() << "formats : " << formats.at(i);
    }
    // 如果是文本才接受拖放
    if (event->mimeData()->hasText())
    {
        event->acceptProposedAction();
    }
}

// 东西拖进来移动
void QtTest::dragMoveEvent(QDragMoveEvent* event)
{
    qDebug() << "dragMoveEvent!" << endl;
}

// 东西拖进来没有放下离开了
void QtTest::dragLeaveEvent(QDragLeaveEvent* event)
{
    qDebug() << "dragLeaveEvent!" << endl;
}

// 有东西被放下(松开鼠标)
void QtTest::dropEvent(QDropEvent* event)
{
    // 判断进来的内容如果是文本,就直接设置label控件的内容
    if (event->mimeData()->hasText())
    {
        ui.label->setText(event->mimeData()->text());
    }
}

猜你喜欢

转载自www.cnblogs.com/duxie/p/11805591.html