Название: Выделить стоку в таблице Отправлено: deMax от Май 04, 2018, 11:05 Помимо стандартного выделения нужно добавить легкую подсветку выбранных строк в таблицу.
QTableView QSortFilterProxyModel QTableModel, ставлю модели Qt::backgroundrole цвет и при изменении выделения вызвываю в модели Код: void setSelected_row(int value) { // QAbstractTableModel child проблема начинается когда работает фильтрация, если исчезают все строки программа падает. если убрать dataChanged(), то все нормально. (она нужна чтобы стереть старую строку и нарисовать новую, tableview update ячеек не работает) Я сообщаю модели что данные изменились, ну и что что их нет на отображение (отфильтровал QProxySortFilter). Я меняю в модели данные. Название: Re: Выделить стоку в таблице Отправлено: deMax от Май 04, 2018, 11:19 если удалить первый udpateRow перестает падать, и работает правильно(старые ячейки затирает).
Название: Re: Выделить стоку в таблице Отправлено: ssoft от Май 04, 2018, 11:21 m_selected_row правильно инициирован в конструкторе?
Название: Re: Выделить стоку в таблице Отправлено: deMax от Май 04, 2018, 12:01 В тестовом примере не было, но программа вылетает когда я выбираю ячейки, а потом ставлю фильтр.
p.s. Программа все равно вылетает, даже с закоменченной строкой. Просто вылет сложнее сделать. ВЫбираю несколько ячеек потом фильтрую чтобы осталась видимой только одна. Падает только когда что то выбрано. ( Вот думаю, может заменить QSortFilterProxy model парой функций... ) Название: Re: Выделить стоку в таблице Отправлено: deMax от Май 04, 2018, 15:50 Если выбрать несколько строк, падает только если останутся строки в середине выделения.
например если выбрать .. ZZ13, ZZ14, ZZ15 ... и ввести ZZ14 - упадет Название: Re: Выделить стоку в таблице Отправлено: deMax от Май 04, 2018, 17:34 короче datachanged в модели заставляет QSortfilterProxyModel пересортировать зачем то всю таблицу, перемешав строки с одинаковыми значениями....
tableview update для ячеек строки вроде работает. Название: Re: Выделить стоку в таблице Отправлено: Авварон от Май 04, 2018, 17:49 За выделение должна отвечать вьюха, а не модель.
Название: Re: Выделить стоку в таблице Отправлено: deMax от Май 06, 2018, 23:41 вьюха и отвечает за выделение(выделение по ячейкам). Но у меня есть дополнительное выделение строки для которой отображается настройка(не я придумал). Может можно реализовать одновременно две модели выделения(выделение одной строки и выделение ячеек)?
В настоящее время я в модели запоминаю выбранные строки(они не совсем совпадают с выбранными ячейками) и выделяю их серым фоном(внутри модели data() -> role == Qt::BackgroundRole. Проблема в том что в модели QSortFilterProxyModel тупит когда вызывается datachange в базовой модели(вылеты, которые я вроде победил и перемешивание ячеек в столбце с одинаковым значением). А tableview через update ячеек ведет себя корректно, но по хорошему обновлять то нужно модель). p.s. Еще вариант выкинуть QSortFilterProxyModel, через std::sort быстрее сортировка будет специализированных данных, да фильтрация тоже легко делается cell.text.contains(lineEditFilter->text()). Название: Re: Выделить стоку в таблице Отправлено: Авварон от Май 07, 2018, 10:49 А, я понял идею. Типа галочками потыкать нужные поля.
QSortFilterProxyModel - плохой класс, очень много оверхеда (и сложный в использовании), да, лучше написать сортировку (не забудьте о layoutAboutToBeChanged/setPersistentIndexes вместо beginReset/endReset) и фильтрацию руками Название: Re: Выделить стоку в таблице Отправлено: deMax от Май 07, 2018, 12:15 В идеале сделать альтернативное выделение другой кнопкой мыши, но так как интерфейс предполагает работу только с левой кнопкой, то пока из всех выбранных ячеек выбирается последняя строка,
чтобы показать данные из какой именно строки конфигурируется. Дома почищу тестовый проект и сюда скину, qsortfilterproxy и крэшиться и сортирует без нужды. Название: Re: Выделить стоку в таблице Отправлено: Авварон от Май 07, 2018, 15:21 А почему нельзя чекбоксы заюзать?
Название: Re: Выделить стоку в таблице Отправлено: deMax от Май 08, 2018, 10:16 Неплохая идея, только я так понял в header их добавить можно только через paintevent и еще mouseevent перехватывать.
Интересно, а можно реализовать множественное выделение? Чтобы можно было выбирать разными цветами, разные ячейки? (При пересечении выделений, рисуется двумя цветами) Название: Re: Выделить стоку в таблице Отправлено: deMax от Май 08, 2018, 11:53 В принципе вставляется, только this->update(); не перерисовывает ячейку QHeaderView::updateSection(0); работает.
https://wiki.qt.io/Technical_FAQ#How_can_I_insert_a_checkbox_into_the_header_of_my_view.3F (https://wiki.qt.io/Technical_FAQ#How_can_I_insert_a_checkbox_into_the_header_of_my_view.3F) Название: Re: Выделить стоку в таблице Отправлено: Авварон от Май 08, 2018, 17:48 Всегда можно присунуть свой хедер в виде frozen строки по аналогии с frozen column example.
|