Перетащите из QListWidget в QLineEdit

У меня есть QListWidget со строками простого текста. Я хочу настроить его так, чтобы пользователь мог перетаскивать эти данные в некоторые объекты QLineEdit.

Я включил перетаскивание для обоих типов, но это не позволяет мне перетаскивать из QListWidget в QLineEdit. Однако это позволяет мне перетаскивать элементы из одного QLineEdit в другой QLineEdit.

Я пока не переустанавливал никаких методов. Все, что я сделал, это включил функции перетаскивания в режиме редактирования.

Как включить перетаскивание из QListWidget в QLineEdit? Какие методы мне нужно повторно реализовать?

Спасибо,


person RushK    schedule 18.07.2013    source источник


Ответы (2)


Я понял.

К вашему сведению:

Вам нужно создать подкласс 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());
    }
}
person RushK    schedule 18.07.2013

Поскольку вы пытаетесь найти разные типы, вы перетаскиваете разные данные mime. Поэтому QLineEdit не знает, как обрабатывать отбрасываемые данные. Подкласс вашего виджета и реализация dropEvent(), и в конечном итоге вам также понадобятся dragEnterEvent(), dragLeaveEvent() и dragMoveEvent().

person Sebastian Lange    schedule 18.07.2013
comment
Нужны ли они мне для QLineEdit или QListWidget или для обоих? - person RushK; 18.07.2013
comment
сори, был занят на работе. Как вы написали, QLineEdit нуждается в dropEvent/EnterDragEvent - person Sebastian Lange; 18.07.2013