У меня проблемы с реализацией 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 isn 'Я даже не звонил.
Я действительно не знаю, что происходит, и делаю ли я что-то не так.Любая помощь приветствуется.
Спасибо!
Редактировать: я запускаю приложение на телефоне 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);
}
Я также напечатал «drop drop», когда вызывается drop drop.Это дает мне следующий вывод:
...
[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 Devices версии 4.6.3 ...
[1] http://www.java2s.com/Code/Cpp/Qt/QListWidgetdraganddrop.htm