2013-06-27 2 views
1

Я работаю над Qt-приложением, где у меня есть QListView. В списке есть несколько элементов. Мое приложение требует, чтобы элементы были перегруппированы в соответствии с выбором пользователя. Все работает нормально, но я столкнулся с небольшой проблемой.Как очистить выбор QListView при выборе нескольких элементов?

Когда я делаю множественный выбор с помощью мыши, то есть выбираю элементы, перетаскивая мышь, он оставляет отметку выбора в QlistView даже после того, как я выполняю некоторую операцию перестановки. Я уверен, что это как-то связано с расчисткой выбора. Я попытался использовать repaint() или clearFocus(), но ничего не работает.

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

P.S .: Я запускаю его в режиме освобождения.

ответ

1

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

void QAbstractItemView::clearSelection() [slot] 

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

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

QItemSelectionModel * QAbstractItemView::selectionModel() const 

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

Посмотрите на Handling selections in item views

Другое дело ...

#ifdef QT_NO_DEBUG 

средство освобождения

#ifndef QT_NO_DEBUG 

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

+0

Clear выбора не позволит мне выбрать элементы. Моя забота - когда я перетаскиваю мышь и выбираю набор для элементов, она оставляет отметку выбора в представлении списка. – Gojira

+0

Я понял неправильно. Но кажется не только я. Может быть, вы должны переформулировать вопрос. В любом случае. проверьте эти вызовы методов, я уверен, что ошибаюсь – Trompa

+0

Я пробовал, но это делает работу. Например. Когда мы выбираем группу папок, мы перетаскиваем мышь, которую стажер дает нам прямоугольную коробку, которая покрывает все предметы, которые попадают под нее. Этот прямоугольник всегда остается неизменным. Как я могу его очистить? – Gojira

0

Используйте функцию QAbstractItemView::clearSelection.

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

+0

Спасибо за ответ. Ясный выбор не позволит мне выбрать элементы. Моя забота - когда я перетаскиваю мышь и выбираю набор для элементов, она оставляет отметку выбора в представлении списка. – Gojira

+0

@Gojira О, извините, я неправильно понял вопрос. Я думал, что у вас проблемы с выбором. – thuga

+0

@Gojira Кстати, что вы имеете в виду под «отметкой выбора»? Является ли это выделенными выделенными элементами или пунктирной линией сфокусированного элемента? Я также смущен вашим вызовом функции 'startDrag'. [Требуется действие сбрасывания в качестве аргумента] (https://qt-project.org/doc/qt-4.8/qabstractitemview.html#startDrag), но вы даете ему позицию? Или это ваша собственная функция? – thuga