Как установить цвет фона и переднего плана элемента вертикального заголовка строки QTableWidget

Я пытаюсь установить цвет фона и переднего плана QTableWidgetItem, который является элементом вертикального заголовка в строке моего QTableWidget. Следующий код не работает для QTableWidgetItem, являющегося элементом вертикального заголовка, хотя тот же код отлично работает для QTableWidgetItem, являющегося обычной ячейкой.

Я использую Qt 4.8 на Fedora 17 x64 Gnome 3.4.

static const QBrush AddedCellBackground = Qt::yellow;
static const QBrush AddedCellForeground = Qt::red;

void rowSelected()
{
    QTableWidgetItem *vertHeadItem = _getSelectedItemVerticalHeader();
    vertHeadItem->setForeground( AddedCellForeground );
    vertHeadItem->setBackground( AddedCellBackground );
}

Этот код не изменяет, когда vertHeadItem является элементом вертикального заголовка, но оказывает желаемое влияние, когда это обычная ячейка. Как установить фон и передний план элемента вертикального заголовка?


person Freedom_Ben    schedule 29.05.2013    source источник
comment
К сожалению, ничто не заставляет используемый QStyle использовать палитру, цвета могут быть жестко закодированы в самом стиле. Трудно понять это, не глядя на исходный код (я думаю, QGtkStyle).   -  person cmannett85    schedule 30.05.2013
comment
Будут ли работать таблицы стилей? См. это для пример.   -  person thuga    schedule 30.05.2013
comment
@thuga Мне удалось заставить таблицы стилей изменить фоновую картинку, но я все еще пытаюсь понять, как сделать так, чтобы она применялась только к определенным строкам.   -  person Freedom_Ben    schedule 30.05.2013
comment
До сих пор нет кости. Я не смог присвоить имя объекта элементу вертикального заголовка, поскольку они не QObject, поэтому я не знаю, как делать только определенные строки.   -  person Freedom_Ben    schedule 30.05.2013
comment
Является ли эта определенная строка выбранной строкой или просто случайной строкой?   -  person thuga    schedule 31.05.2013
comment
Это строка, которая была добавлена, но еще не сохранена. По сути, он должен иметь зеленый фон, чтобы указать пользователю, что строка еще не сохранена в базе данных. Может быть любое количество этих строк и любое количество сохраненных строк. Я могу установить ячейки содержимого, но я все еще не могу установить элемент вертикального заголовка   -  person Freedom_Ben    schedule 31.05.2013
comment
Вы решили свою проблему? Если нет, я разместил другой ответ.   -  person Trilarion    schedule 16.07.2014


Ответы (2)


Я думаю, вы можете легко настроить таргетинг на определенные элементы, зная, что это «AccessibleName», вы можете попробовать это:

QTableWidgetItem#YourAccessibleName {

/* style definitions */

}
person milot    schedule 31.05.2013
comment
Как я могу получить/установить AccessibleName? - person Freedom_Ben; 31.05.2013
comment
Похоже, что не-QObject не может иметь Доступные имена - person Freedom_Ben; 06.06.2013

В вопросе возможно ли изменить цвет метки строки QTableWidget? о той же теме, но для PyQt мое решение состояло в том, чтобы получить QTableWidgetItem вертикального заголовка и установить там фон и передний план, однако был изменен только передний план, фон остался гладким серый градиент. Вероятно, стиль переопределял/игнорировал фон. Указание другого стиля (например, Cleanlooks) исправило это.

Так что добавьте что-то подобное в построении табличного виджета

QTableWidget::verticalHeader().setStyle(QStyleFactory::create("CleanLooks"))
person Trilarion    schedule 16.07.2014
comment
Не уверен в синтаксисе, не совсем знаком с синтаксисом C++. - person Trilarion; 16.07.2014