从QListWidget拖放到QLineEdit

时间:2013-07-18 04:03:25

标签: qt drag-and-drop qlineedit

我有一个包含简单文本行的QListWidget。我想设置它,以便用户可以将这些数据拖放到一些QLineEdit对象中。

我已经为两种类型打开了拖放功能,但它不允许我从QListWidget拖放到QLineEdit。但是,它允许我从一个QLineEdit拖动到另一个QLineEdit。

到目前为止,我没有重新实现任何方法。我所做的就是在编辑视图中打开拖放功能。

如何启用从QListWidget拖放到QLineEdit?我需要重新实施哪些方法?

谢谢,

2 个答案:

答案 0 :(得分:3)

我明白了。

供参考:

您需要继承QLineEdit并重新实现dragEnterEvent和dropEvent。

void MyLineEdit::dragEnterEvent(QDragEnterEvent *e){
    if(e->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")){
        e->acceptProposedAction();
    }
}

void MyLineEdit::dropEvent(QDropEvent *e){
    QByteArray encoded = e->mimeData()->data("application/x-qabstractitemmodeldatalist");
    QDataStream strm(&encoded, QIODevice::ReadOnly);
    while(!strm.atEnd()){
        int row, col;
        QMap<int,  QVariant> data;
        strm >> row >> col >> data;
        this->setText(data[0].toString());
    }
}

答案 1 :(得分:2)

由于您尝试使用不同类型的dnd,因此可以拖动不同的mime数据。因此,QLineEdit不知道如何处理被删除的数据。对小部件进行子类化并实现dropEvent(),最后还需要dragEnterEvent()dragLeaveEvent()和dragMoveEvent()。