Я работаю над приложением Qt, где у меня есть QListView. В списке есть несколько предметов. Мое приложение требует, чтобы элементы были переставлены в соответствии с выбором пользователя. Все работает нормально, но я столкнулся с небольшой проблемой.
Когда я делаю множественный выбор с помощью мыши, то есть выбираю элементы перетаскиванием мыши, он оставляет метку выбора в QlistView даже после выполнения какой-либо операции переупорядочения. Я уверен, что это как-то связано с очисткой выбора. Я пытался использовать repaint () или clearFocus (), но, похоже, ничего не работает.
Например, когда мы выбираем группу папок, мы перетаскиваем нашу мышь, и эта внутренняя часть дает нам прямоугольник, который охватывает все элементы, которые находятся под ним. Этот конкретный прямоугольник остается внутри моего QListView. Я не хочу, чтобы после того, как я выбрал предметы.
У меня есть mousemoveevent, внутри которого я делаю это:
void BinListView::mouseMoveEvent (QMouseEvent *event) {
if (NULL == event) {
return;
} else {
if (Qt::LeftButton & event->buttons ()) {
int nDis = (event->pos () - m_posStart).manhattanLength ();
if (nDis >= QApplication::startDragDistance ()) {
startDrag (m_posStart);
}
}
#ifdef QT_NO_DEBUG
QListView::mouseMoveEvent (event);
QListView::repaint();
QListView::clearFocus();
#endif
}
repaint();
}
Если вы заметите область QT_NO_DEBUG, вы увидите, что я очищаю фокус и перекрашиваю, но ничто не помогает мне. Любое решение этой проблемы?
П.С .: Я запускаю его в режиме выпуска.
использование
void QAbstractItemView::clearSelection() [slot]
очистить выбор
Кроме того, все виды имеют модель выбора, к которой вы можете получить доступ через:
QItemSelectionModel * QAbstractItemView::selectionModel() const
что позволяет делать гораздо больше вещей, выбирая
смотреть на Обработка выбора в представлении элементов
Еще одна вещь …
#ifdef QT_NO_DEBUG
означает выпуск
#ifndef QT_NO_DEBUG
будет режим отладки, и я уверен, что он не скомпилирует вставленный вами код
Использовать QAbstractItemView :: clearSelection функция.
Если у вас есть подкласс QListView
Вы можете просто позвонить с clearSelection();