Qt как выделить заголовок qtablewidget
Перейти к содержимому

Qt как выделить заголовок qtablewidget

Как изменить цвет фона из заголовка (горизонтальный / вертикальный) 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

У меня есть виджет таблицы с двумя заголовками столбцов в диалоге, который выглядит следующим образом:

enter image description here

Существует разделение между заголовками столбцов с именами «Индекс» и «Метка», но не существует разделительной границы между этими заголовками и строкой под ними. Как это можно добавить?

Скажем, таблица создается как:

Я знаю, что могу получить первый горизонтальный заголовок как QTableWidgetItem, выполнив headerItem = table.horizontalHeaderItem(0) изменение некоторых свойств и установив его обратно, но я не уверен в том, какие свойства устанавливать или есть ли более простой подход.

РЕДАКТИРОВАТЬ:

Если я извлекаю заголовок и устанавливаю свойства стиля, тени и ширины линии основного кадра с помощью:

Я получаю что-то похожее на это:

enter image description here

Таким образом, граница появляется вокруг заголовка. Это может быть сделано для каждого элемента заголовка в отдельности, но есть несколько проблем:

  1. Граница простирается за ширину ячеек ниже
  2. Мне бы все равно пришлось сопоставить цвет рамки с существующими линиями, чтобы это выглядело несколько прилично.
  3. Похоже, что вертикальная линия, которая разделяет «Индекс» и «Метка», смещена относительно линии, разделяющей клетки ниже (если только мои глаза не подшучивают над мной).

Есть ли более «встроенный» способ сделать это?

3 ответа

У меня такая же проблема. Первое, что нужно отметить, это то, что это происходит только в Windows 10. В других ОС ремонтировать нечего, просто работает. В Windows 10, однако, примитивы рисования не рисуют нижнюю границу (это стиль заголовка таблицы Windows 10 по умолчанию — как это видно в проводнике Windows). Это неудачно, но может быть решено с помощью следующей таблицы стилей:

Извините, что беспокою вас кодом C ++, но это должно быть достаточно просто, чтобы перевести в действительный код Pyqt.

Примечание 1: цвет фона и отступы неудачны, но они необходимы для того, чтобы наш пользовательский рендеринг выглядел по умолчанию.

Примечание 2: Цвет границы — это цвет сетки в моей системе. Я не использовал цвет заголовка по умолчанию.

Примечание 3: Часть QTableCornerButton::section необходима для добавления отсутствующей границы ниже верхнего левого угла. Если вертикальный заголовок не виден, пропущенная строка тоже невидима.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *