Как отменить выбор QListView при выборе нескольких элементов?

Я работаю над приложением 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, вы увидите, что я очищаю фокус и перекрашиваю, но ничто не помогает мне. Любое решение этой проблемы?

П.С .: Я запускаю его в режиме выпуска.

1

Решение

использование

void QAbstractItemView::clearSelection() [slot]

очистить выбор

Кроме того, все виды имеют модель выбора, к которой вы можете получить доступ через:

QItemSelectionModel * QAbstractItemView::selectionModel() const

что позволяет делать гораздо больше вещей, выбирая

смотреть на Обработка выбора в представлении элементов

Еще одна вещь …

#ifdef QT_NO_DEBUG

означает выпуск

#ifndef QT_NO_DEBUG

будет режим отладки, и я уверен, что он не скомпилирует вставленный вами код

2

Другие решения

Использовать QAbstractItemView :: clearSelection функция.

Если у вас есть подкласс QListView Вы можете просто позвонить с clearSelection();

0

По вопросам рекламы [email protected]