Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: xintrea от Октябрь 25, 2014, 23:27



Название: QTableView - не выделяется строка при QAbstractItemView::SelectRows
Отправлено: xintrea от Октябрь 25, 2014, 23:27
Есть у меня класс, унаследованный от QTableView. Для него я устанавливаю следующие параметры:

Код:
 setSelectionMode(QAbstractItemView::SingleSelection);
 setSelectionBehavior(QAbstractItemView::SelectRows);

Проблема в том, что не выделяется строка при ЛЕВОМ клике мышкой. Выделение строки ЛЕВЫМ кликом возможно только, если это первый клик на таблице. Все последующие клики не выделяют строку, а выделяют ячейку.

На экране происходит вот это: http://i.piccy.info/i9/dd6d85d244c18553e7c6fcb6d95ccdcc/1414267658/48572/597435/scr_362.png

Выделенная строка №4 - была выделена при первом ЛЕВОМ клике. А ячейка в строке №2 была выделена позже, при клике ЛЕВОЙ кнопки мыши.

Не могу разобраться - у меня еще что-то не настроено в QTableView? Или это могут быть проблемы из-за переназначения сигналов?

Исходник: https://github.com/xintrea/mytetra_dev/blob/experimental/src/views/recordTable/RecordTableView.cpp


Название: Re: QTableView - не выделяется строка при QAbstractItemView::SelectRows
Отправлено: gil9red от Октябрь 26, 2014, 00:32
Проблема явно не в
Код:
setSelectionMode(QAbstractItemView::SingleSelection);
 setSelectionBehavior(QAbstractItemView::SelectRows);
, а среди почти девяти сотен вашего кода исходника RecordTableView.cpp :)
Я видел, что вы там какие-то манипуляции с выделением делали :)


Название: Re: QTableView - не выделяется строка при QAbstractItemView::SelectRows
Отправлено: xintrea от Октябрь 26, 2014, 01:11
Проблема явно не в
Код:
setSelectionMode(QAbstractItemView::SingleSelection);
 setSelectionBehavior(QAbstractItemView::SelectRows);
, а среди почти девяти сотен вашего кода исходника RecordTableView.cpp :)
Я видел, что вы там какие-то манипуляции с выделением делали :)

Ну вот я закомментировал установку всех сигналов - поставил в начале функции setupSignals() return.

И поведение такое же глючное. А это практически чистый QTableView.


Название: Re: QTableView - не выделяется строка при QAbstractItemView::SelectRows
Отправлено: VPS от Октябрь 26, 2014, 14:25
У Вас проблемы из-за реализации слота:
Код:
virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
На самом деле, если выделить новую строку и свернуть/развернуть приложение, то можно увидеть, что новая строка выделяется...

П.С.: можно в конце этого слота, вызвать метод родительского класса.


Название: Re: QTableView - не выделяется строка при QAbstractItemView::SelectRows
Отправлено: xintrea от Октябрь 27, 2014, 00:47
У Вас проблемы из-за реализации слота:
Код:
virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
На самом деле, если выделить новую строку и свернуть/развернуть приложение, то можно увидеть, что новая строка выделяется...

П.С.: можно в конце этого слота, вызвать метод родительского класса.

Ага, спасибо, что-то я ступил. Для отладки отключил все коннекты - не помогло. Тогда для всех обработчиков прописал return в самое начало. Получилось, что selectionChanged() переопределен ничего не делающим методом, а метод базового класса как не вызывался. так и не вызывается. Исправил. Теперь при клике выделяется нормально вся строка.

Но осталась проблема. Сейчас при старте программы в этой таблице выделяется одна ячейка, несмотря на то, что я в конструктор перенес настройку

Код:
setSelectionBehavior(QAbstractItemView::SelectRows);

Вообще не могу придумать как исправить. Вызывать искуственно selectionChanged() на ту же самую строку сразу после создания объекта - это как-то вообще криво. Есть стандартное решение?

Если быть более точным, то программная установка засветки на нужной строке с номером pos (в первой колонке):

Код:
QModelIndex selIdx=recordModel->index(pos, 0);

selectionModel()->setCurrentIndex(selIdx, QItemSelectionModel::ClearAndSelect);

вызывает выделение одной ячейки, а не всей строки. Несмотря на настройку setSelectionBehavior(QAbstractItemView::SelectRows).


Название: Re: QTableView - не выделяется строка при QAbstractItemView::SelectRows
Отправлено: VPS от Октябрь 27, 2014, 13:43
Думаю для того, чтобы выцепить правильное количество выделенных столбцов, необходимо работать с "selectionModel"...