Как изменить цвет фона из заголовка (горизонтальный / вертикальный) QTableWidget на Qt?
Я уже знаю, как изменить все заголовки вместе, используя:
Но мне нужно изменить индивидуально пункты. Очевидно, если это возможно.
Решение
Есть как минимум 2 способа решить эту проблему. Очень просто:
Просто используйте setHeaderData() и установить конкретные цвета для определенных разделов.
Но, к сожалению, это не будет работать на некоторых системах … Qt использует стиль платформы. Например, моя Windows не позволяет изменить цвет заголовка. Так что этот код не работает на моей машине. К счастью, это легко решается изменением глобального стиля. Итак, следующий код работает:
Если вы не хотите менять стиль, то вы должны создать свой собственный HeaderView , Возможно, что-то похожее на Вот .
Qt — это просто!
Давайте немного расскажу вам о работе с таким элементом как TableWidget.
Если дважды щёлкнуть мышью по размещенной на форме таблице, то появится окно, которое позволяет создавать столбцы, строки и даже наполнение таблицы.
- Чтобы установить количество столбцов и строк из кода программы, необходимо сделать следующее:
- Чтобы удалить столбец или строку необходимо вызвать соответствующие функции:
- У таблицы есть горизонтальный и вертикальный заголовки.
- Чтобы изменить заголовок, необходимо сделать следующее:
- Заголовки можно скрыть в окне свойств визуального редактора
- Так же их можно скрыть из кода программы
Работа с элементом QTableWidget
Сообщение tyabut » 09 мар 2020, 00:55
- Каждая ячейка в таблице QTableWidget для того чтобы что-то отобразить, должна содержать в себе элемент QTableWidgetItem.
- Объект QTableWidgetItem должен создаваться в динамической области памяти с помощью ключевого слова new.
- Данный элемент может содержать в себе иконку.
- Создавать этот объект можно как заранее, так и непосредственно при добавлении значения в ячейку таблицы.
- Для добавления значения в ту или иную ячейку в таблице используется функция setItem() у элемента QTableWidget.
- Функция setItem() принимает следующие параметры: индекс строки, индекс столбца, экземпляр объекта QTableWidgetItem.
Обратите внимание, что объект создаётся в динамической области памяти при помощи ключевого слова new, но удалять такой объект (delete) не нужно!
Так как указатель на этот объект мы передаем таблице, сама таблица берёт бразды правления в свои руки.
Т.е. она сама поймёт, когда необходимо освободить память от этих объектов и произвести все необходимые манипуляции для предотвращения утечек памяти.
Так же обратите внимание, что попытка создать экземпляр объекта в ячейке индексов которой не существует в таблице — будет проигнорирована.
Например, установили в таблице количество строк равное 10, а количество столбцов равное 3.
При попытке вызвать следующую команду:
Добавить границу под заголовками столбцов в QTableWidget
У меня есть виджет таблицы с двумя заголовками столбцов в диалоге, который выглядит следующим образом:

Существует разделение между заголовками столбцов с именами «Индекс» и «Метка», но не существует разделительной границы между этими заголовками и строкой под ними. Как это можно добавить?
Скажем, таблица создается как:
Я знаю, что могу получить первый горизонтальный заголовок как QTableWidgetItem, выполнив headerItem = table.horizontalHeaderItem(0) изменение некоторых свойств и установив его обратно, но я не уверен в том, какие свойства устанавливать или есть ли более простой подход.
РЕДАКТИРОВАТЬ:
Если я извлекаю заголовок и устанавливаю свойства стиля, тени и ширины линии основного кадра с помощью:
Я получаю что-то похожее на это:

Таким образом, граница появляется вокруг заголовка. Это может быть сделано для каждого элемента заголовка в отдельности, но есть несколько проблем:
- Граница простирается за ширину ячеек ниже
- Мне бы все равно пришлось сопоставить цвет рамки с существующими линиями, чтобы это выглядело несколько прилично.
- Похоже, что вертикальная линия, которая разделяет «Индекс» и «Метка», смещена относительно линии, разделяющей клетки ниже (если только мои глаза не подшучивают над мной).
Есть ли более «встроенный» способ сделать это?
3 ответа
У меня такая же проблема. Первое, что нужно отметить, это то, что это происходит только в Windows 10. В других ОС ремонтировать нечего, просто работает. В Windows 10, однако, примитивы рисования не рисуют нижнюю границу (это стиль заголовка таблицы Windows 10 по умолчанию — как это видно в проводнике Windows). Это неудачно, но может быть решено с помощью следующей таблицы стилей:
Извините, что беспокою вас кодом C ++, но это должно быть достаточно просто, чтобы перевести в действительный код Pyqt.
Примечание 1: цвет фона и отступы неудачны, но они необходимы для того, чтобы наш пользовательский рендеринг выглядел по умолчанию.
Примечание 2: Цвет границы — это цвет сетки в моей системе. Я не использовал цвет заголовка по умолчанию.
Примечание 3: Часть QTableCornerButton::section необходима для добавления отсутствующей границы ниже верхнего левого угла. Если вертикальный заголовок не виден, пропущенная строка тоже невидима.