В первой статье мы начали создавать свой вариант класса QTableView и реализовали многорядно вывод колонок по шаблону (многорядно).
В этой статье мы реализовали свой вариант применения выравнивания к ячейкам в таблице, управление цветом текста в ячейке, размером и жирностью шрифта.
Еще появилась возможность добавлять так называемые лейблы в таблице. На картинке ниже это текст НАЛ: и БН: . Это как-бы постоянный текст (повторяющийся на каждой строке в определенном месте). Иногда это бывает очень удобно.
Сразу надо сказать, что все эти "красоты" не имеют никакого отношения к штатным css стилям или к переопределению ролей модели данных типа (DecorationRole, TextAlignmentRole, TextColorRole и т.д.).
Тут происходит изменение метода drawCell (по аналогии с классом QTableView). Точнее мы работает с объектом opt (QStyleOptionViewItemV4) перед отрисовкой изменяя его параметры font,, palette и т.д.
Ну как всегда лучше один раз увидеть, чем много раз прочитать:
Комментарии (6)
Alloxa83
11.11.2023 17:13Есть ещё давно написанные компоненты QAdvancedItemViews. Из коробки там нет многострочных заголовков, но я ним прикручивал его. Может что дельного найдете там. Мне там нравится как фильтры реализованы, а так же возможность закрепления строк вверху.
kkmspb Автор
11.11.2023 17:13+1Спс, интересно, там наследование прямо от QWidget
class QAIVLIBSHARED_EXPORT QAdvancedTableView : public QWidget
Такой вариант в голову ещё не приходил. И это хорошая идея.
kkmspb Автор
11.11.2023 17:13Чтобы унаследовать QPTableView от QWidget (или QFrame), надо похоже ещё самому и QAbstractScrollArea реализовать. Задача не сложная, но оставим на будущее (а то так недолго и свой фреймворк написать)
pvsur
На просторах интернета найден следующий раритет- HierarchicalHeaderView. Вполне себе под Qt 5.15.9 работает, но без сортировок, видимо какие-то сигналы не перехватываются ...
Можно как-то обойтись без перекомпиляции исходников Qt аналогично этому ?
kkmspb Автор
Не получается пока никак без перекомпиляции. Мы наследуемся напрямую от QAbstractItemView (это для таблиц). У QAbstractItemView определен экспорт Q_GUI_EXPORT.
У QAbstractItemView есть приватный спутник QAbstractItemViewPrivate, в котором реализована часть функционала. У QAbstractItemViewPrivate экспорт отключен (см Q_AUTOTEST_EXPORT). Короче все методы QAbstractItemViewPrivate наружу в библиотеке не торчат, но QAbstractItemView их дергает. В общем штатно если вы унаследуетесь от QAbstractItemView вы не собирёте проект иначе как в составе исходников Qt. При линковке не найдены будут методы QAbstractItemViewPrivate .
Во всяком случае у меня никак не получается.
kkmspb Автор
Спс, посмотрим, такого не находил