我有一个包含简单文本行的QListWidget。我想设置它,以便用户可以将这些数据拖放到一些QLineEdit对象中。
我已经为两种类型打开了拖放功能,但它不允许我从QListWidget拖放到QLineEdit。但是,它允许我从一个QLineEdit拖动到另一个QLineEdit。
到目前为止,我没有重新实现任何方法。我所做的就是在编辑视图中打开拖放功能。
如何启用从QListWidget拖放到QLineEdit?我需要重新实施哪些方法?
谢谢,
答案 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()。