Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: retif от Декабрь 07, 2012, 20:51



Название: Разные варианты выделения мышью в QTableView
Отправлено: retif от Декабрь 07, 2012, 20:51
На форме находится QTableView, у него выставлены свойства:
  • selectionMode: MultiSelection;
  • selectioBehavior: SelectRows.

Пример таблицы:
1|2|3
---------
4|5|6

Выделение строк мышью (порядок считывания индексов) происходит двумя способами (это не я сделал, это так на стандартных классах):
  • при выделении строк мышью поштучно (один клик - одна строка), индексы в модель выделения попадают в одном порядке (1, 2, 3, 4, 5, 6);
  • если же нажать кнопку мыши, протянуть по строкам и отпустить, то индексы в модель выделения попадут в другом порядке (1, 4, 2, 5, 3, 6). В таком же порядке они туда попадают, если выделить все записи в таблице нажатием на угловую кнопку (cornerButton).

Как можно отличать, каким именно способом произошло выделение? Мне нужно записать выделенные строки в файл, но я могу учесть только один из вариантов. Мне требуется записывать построчно, как при первом варианте (выделено зелёным цветом).

Саму запись в файл делаю так (опуская подробности):
Код:
QModelIndexList indexes = _model->selectedIndexes();
for (int x = 0; x < indexes.count(); x++)
    exportFile.write(indexes.at(x).data().toString().toAscii());


Название: Re: Разные варианты выделения мышью в QTableView
Отправлено: kambala от Декабрь 08, 2012, 00:48
в фильтре событий или в наследнике вью проверять зажата ли постоянно кнопка мыши в mouse*Event()


Название: Re: Разные варианты выделения мышью в QTableView
Отправлено: retif от Декабрь 08, 2012, 07:58
И если зажата, то не давать выделять? Но ещё остаётся угловая кнопка, которая всё равно будет осуществлять выделение в отличном от нужного мне порядке. Непонятно, почему вообще такое происходит - два разных порядка добавления индексов в список выделенных.

- - -

По-видимому, это никак не регулируется. Нашёл почти-решение своей проблемы тут (http://www.forum.crossplatform.ru/index.php?showtopic=9036&st=0).