В первой статье мы начали создавать свой вариант класса QTableView и реализовали многорядно вывод колонок по шаблону (многорядно).

В этой статье мы реализовали свой вариант применения выравнивания к ячейкам в таблице, управление цветом текста в ячейке, размером и жирностью шрифта.

Еще появилась возможность добавлять так называемые лейблы в таблице. На картинке ниже это текст НАЛ: и БН: . Это как-бы постоянный текст (повторяющийся на каждой строке в определенном месте). Иногда это бывает очень удобно.

для колонок указываем цвет, выравнивание, и др.
для колонок указываем цвет, выравнивание, и др.

Сразу надо сказать, что все эти "красоты" не имеют никакого отношения к штатным css стилям или к переопределению ролей модели данных типа (DecorationRole, TextAlignmentRole, TextColorRole и т.д.).

Тут происходит изменение метода drawCell (по аналогии с классом QTableView). Точнее мы работает с объектом opt (QStyleOptionViewItemV4) перед отрисовкой изменяя его параметры font,, palette и т.д.

Ну как всегда лучше один раз увидеть, чем много раз прочитать:

Комментарии (6)


  1. pvsur
    11.11.2023 17:13

    На просторах интернета найден следующий раритет- HierarchicalHeaderView. Вполне себе под Qt 5.15.9 работает, но без сортировок, видимо какие-то сигналы не перехватываются ...

    Можно как-то обойтись без перекомпиляции исходников Qt аналогично этому ?


    1. kkmspb Автор
      11.11.2023 17:13
      +1

      Не получается пока никак без перекомпиляции. Мы наследуемся напрямую от QAbstractItemView (это для таблиц). У QAbstractItemView определен экспорт Q_GUI_EXPORT.
      У QAbstractItemView есть приватный спутник QAbstractItemViewPrivate, в котором реализована часть функционала. У QAbstractItemViewPrivate экспорт отключен (см Q_AUTOTEST_EXPORT). Короче все методы QAbstractItemViewPrivate наружу в библиотеке не торчат, но QAbstractItemView их дергает. В общем штатно если вы унаследуетесь от QAbstractItemView вы не собирёте проект иначе как в составе исходников Qt. При линковке не найдены будут методы QAbstractItemViewPrivate .
      Во всяком случае у меня никак не получается.


    1. kkmspb Автор
      11.11.2023 17:13

      Спс, посмотрим, такого не находил


  1. Alloxa83
    11.11.2023 17:13

    Есть ещё давно написанные компоненты QAdvancedItemViews. Из коробки там нет многострочных заголовков, но я ним прикручивал его. Может что дельного найдете там. Мне там нравится как фильтры реализованы, а так же возможность закрепления строк вверху.


  1. kkmspb Автор
    11.11.2023 17:13
    +1

    Спс, интересно, там наследование прямо от QWidget

    class QAIVLIBSHARED_EXPORT QAdvancedTableView : public QWidget

    Такой вариант в голову ещё не приходил. И это хорошая идея.


    1. kkmspb Автор
      11.11.2023 17:13

      Чтобы унаследовать QPTableView от QWidget (или QFrame), надо похоже ещё самому и QAbstractScrollArea реализовать. Задача не сложная, но оставим на будущее (а то так недолго и свой фреймворк написать)