Показывать стандартный значок предупреждения в Qt4 - PullRequest
6 голосов
/ 15 декабря 2010

Я пытаюсь отобразить значок предупреждения рядом с QLineEdit, если он содержит недопустимые данные.
Я пытался использовать QStyle::standardIcon(QStyle::SP_MessageBoxWarning), чтобы получить стандартное растровое изображение и поместить его в QLabel, и в некоторых случаях это работает.При запуске Gnome значок отображается правильно, но при работе в KDE значок не отображается.Я предполагаю, что значок предупреждения просто не включен в стиль, используемый в KDE.

Какой предпочтительный способ отображения «стандартного» значка предупреждения в Qt?Существует ли какой-то список, который показывает, какие значки включены в каждый стиль?Как я могу получить значок из стиля, который, как я знаю, включает значок предупреждения?

Ответы [ 3 ]

9 голосов
/ 15 декабря 2010

В прошлый раз, когда у меня была похожая проблема, я нашел это обсуждение в Qt labs полезным. Он сообщил мне, что QIcon теперь (с версии 4.6, я полагаю) имеет функцию QIcon::fromTheme, которая позволяет загружать иконки на основе Спецификации именования иконок Freedesktop.org и, кроме того, предоставьте запасной значок, который будет использоваться, если текущая тема не имеет соответствующего значка.

Затем я включил некоторые очень простые значки для использования в качестве запасного варианта и в целом определял значки только по их именам в Freedesktop. Это почти всегда соответствовало теме, и программа все еще работала в тех случаях, когда люди пропускали значки.

Что касается значка предупреждения, я предполагаю / надеюсь, что каждая тема должна иметь тему с именем "dialog-warning", и что это то, что вы ищете.

Надеюсь, это поможет.

Редактировать : Да, и, если вы не знаете, может быть полезно взглянуть, например, на набор иконок Tango , чтобы получить общее представление о том, что такое Freedesktop имена соответствуют (хотя это, конечно, зависит от темы).

5 голосов
/ 15 декабря 2010

Qt объединяет несколько изображений , которые являются ресурсами, которые вы можете использовать в своем собственном коде.Эти изображения являются расширенным набором доступных через standardIcon(). Возможно, вы захотите убедиться, что конкретное изображение включено в версии Qt, на которые вы нацелены.*

QPixmap pixmap(":/trolltech/styles/commonstyle/images/up-128.png");
// use pixmap as needed
1 голос
/ 20 июля 2018

Для тех, кто хочет знать, как это сделать в среде Windows, вы можете:

Создать qLabel в своем пользовательском классе, а затем в конструкторе этого класса создать QIcon с нужным стилемпреобразуйте его в растровое изображение и используйте функцию QLabel :: setPixmap (), чтобы применить его к созданному вами:

QIcon icon = style()->standardIcon(QStyle::SP_MessageBoxWarning); //or 
//whatever icon you choose
QPixmap pixmap = icon.pixmap(QSize(60, 60));
ui->iconLabel->setPixmap(pixmap);

ui->iconLabel->setScaledContents(true); //you can set this to fill the 
//dimensions of your qLabel if you wish.
...