Как настроить внешний вид ссылок в QLabels с помощью таблиц стилей?
у меня есть 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);
однако для этого требуется, чтобы цвет был жестко закодирован. Есть ли способ установить цвет из таблицы стилей вместо этого?
EDIT:
я обнаружил еще одну проблему с настройкой палитры. Если я хочу просто изменить палитру моего виджета (заменив widget
на qApp
в примере выше), то это не сработает. Я не хочу влиять на всех остальных QLabels
в приложение, так как я могу ограничить изменения палитры этот виджет?
3 ответов
короткий ответ-нет. Недавно мне пришлось это сделать.
-
QLabel!visited
не работает, потому что Qt не отслеживает, были ли посещены QLabel или нет. -
QLabel { color: ... }
не работает для ссылок. Не могу найти почему, но все, что я нашел это предложение использоватьQPallete
в этом случае.
у меня был небольшой успех, явно установив QPalette
-- он работает, если вы установите его для всего приложения, но не если вы установите его в виджете. В конце концов, самое простое, что мне нужно было сделать, это использовать QTextBrowser вместо этого, который поддерживает подмножество HTML. Затем я мог бы переопределить цвет ссылок, используя обычную таблицу стилей CSS:
QTextBrowser browser;
// IMPORTANT! - set the stylesheet before the content
browser->document()->setDefaultStyleSheet("a {color: white; }");
browser->setText(html);
один из способов-это добавить style="color: whatever"
или класс к внутреннему <span>
ссылка. Я еще не понял, как применить это ко всему приложению, но это хорошее начало.