У меня проблемы с реализацией QListWidget с настраиваемыми элементами, которые можно переупорядочить, перетаскивая их. Проблема в том, что когда я делаю быстрый двойной щелчок (очень короткое перетаскивание) по элементу, элемент иногда исчезает из QListWidget.
Это конструктор моего виджета:
ListPopisiDragDrop::ListPopisiDragDrop(QWidget *parent) :
QListWidget(parent)
{
setSelectionMode(QAbstractItemView::SingleSelection);
setDragEnabled(true);
viewport()->setAcceptDrops(true);
setDefaultDropAction(Qt::MoveAction);
setDropIndicatorShown(true);
setDragDropMode(QAbstractItemView::InternalMove);
}
также событие drop:
void ListPopisiDragDrop::dropEvent(QDropEvent *event){
int startRow=currentIndex().row();
QListWidget::dropEvent(event);
int endRow=currentIndex().row();
//more code...
}
Пользовательские элементы создаются путем реализации функций paint () и sizeHint () из QAbstractItemDelegate.
Когда возникает проблема с исчезновением элементов, dropEvent даже не вызывается.
Я действительно не знаю, что происходит и делаю ли я что-то не так. Любая помощь приветствуется.
Спасибо!
Изменить: я запускаю приложение на телефоне Symbian S60 5th edition.
Edit2: если я добавлю эту строку в конструктор:
setDragDropOverwriteMode(true);
элемент в списке все равно исчезнет, но пустая строка останется на своем месте.
Edit3: я добавил этот код, чтобы увидеть, что происходит:
bool ListPopisiDragDrop::event(QEvent *e){
qDebug()<<"new event, type: "<<e->type()<<", listCount: "<<this->count();
QListWidget::event(e);
}
Я также напечатал «событие перетаскивания», когда вызывается событие перетаскивания. Это дает мне следующий результат:
...
[Qt Message] new event, type: 12 , listCount: 2
[Qt Message] new event, type: 12 , listCount: 2
[Qt Message] new event, type: 68 , listCount: 2
[Qt Message] DROPEVENT
[Qt Message] new event, type: 71 , listCount: 2
[Qt Message] new event, type: 12 , listCount: 2
[Qt Message] new event, type: 12 , listCount: 2
[Qt Message] new event, type: 68 , listCount: 2
[Qt Message] DROPEVENT
[Qt Message] new event, type: 71 , listCount: 2
[Qt Message] new event, type: 12 , listCount: 2
[Qt Message] new event, type: 12 , listCount: 2
[Qt Message] new event, type: 12 , listCount: 2
[Qt Message] new event, type: 68 , listCount: 2
[Qt Message] new event, type: 12 , listCount: 1
[Qt Message] new event, type: 12 , listCount: 1
[Qt Message] new event, type: 1 , listCount: 1
...
Как видите, после типа события 68 listCount изменяется с 2 на 1 (исчезает один элемент). Я все еще не понимаю, в чем проблема ...
Edit4: у меня такое же поведение, даже когда я не использую настраиваемые элементы. Все еще не могу понять, что случилось.
Edit5: Даже пример из [1] имеет такое же поведение при тестировании на мобильном устройстве. Может ли быть проблема с версией Qt? Я использую Qt для устройств Symbian версии 4.6.3 ...
[1] http://www.java2s.com/Code/Cpp/Qt/QListWidgetdraganddrop.htm