Как настроить внешний вид ссылок в QLabels с помощью таблиц стилей? - PullRequest
14 голосов
/ 31 марта 2011

У меня есть QLabel с таблицей стилей Qt, которая устанавливает темный фон:

QLabel {
background: black;
color: white;
}

Это прекрасно работает, пока я не добавлю текст со встроенным URL и не установлю Qt::TextFormat на Qt::RichText. Ссылка по умолчанию отображается темно-синим цветом, который трудно прочитать на темном фоне.

Я пытался настроить его с помощью таблицы стилей, например:

a { color: white; }
QLabel!visited { color: white; }

но это не имеет никакого эффекта. Единственное, что действительно работает, - это изменение QPalette приложения:

QPalette newPal(qApp->palette());
newPal.setColor(QPalette::Link, Qt::white);
newPal.setColor(QPalette::LinkVisited, Qt::white);
qApp->setPalette(newPal);

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

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

Я обнаружил еще одну проблему с настройкой палитры. Если я хочу просто изменить палитру моего виджета (заменив widget на qApp в примере выше), это не сработает. Я не хочу влиять на все остальные QLabels в приложении, так как я могу ограничить изменения палитры для этого виджета?

Ответы [ 3 ]

6 голосов
/ 01 апреля 2011

У меня был небольшой успех при явной установке QPalette - он работает, если вы установите его для всего приложения, но не если вы установите его в виджете.В конце концов, проще всего было использовать QTextBrowser , который поддерживает подмножество HTML.Затем я могу переопределить цвет ссылок, используя обычную таблицу стилей CSS:

QTextBrowser browser;
// IMPORTANT! - set the stylesheet before the content
browser->document()->setDefaultStyleSheet("a {color: white; }");
browser->setText(html);
5 голосов
/ 08 февраля 2014

Один из способов - добавить style="color: whatever" или класс к внутренней <span> ссылке. Я еще не понял, как применить это ко всему приложению, но это хорошее начало.

2 голосов
/ 31 марта 2011

Короткий ответ - нет. Недавно мне пришлось это сделать.

  1. QLabel!visited не работает, потому что Qt не отслеживает посещение QLabel или нет.
  2. QLabel { color: ... } не работает для ссылок. Не могу найти почему, но все, что я нашел, это предложение использовать QPallete в этом случае.
...