Стиль HTML по умолчанию для элементов управления в библиотеке Qt - PullRequest
0 голосов
/ 31 мая 2009

Это вопрос о библиотеке Qt, а не о веб-дизайне.

Для QLabel и других элементов управления я могу установить текст HTML, например "

Some Text

". Вопрос заключается в следующем: где определяется стиль HTML по умолчанию? Как узнать, какой шрифт будет использоваться для тега

? Следующий вопрос: можно ли изменить стиль HTML по умолчанию? Редактировать: я хочу указать в одном месте в моем коде, как будут отображаться мои элементы управления. Указание стиля CSS на всех ярлыках не кажется мне элегантным решением. Edit2: Кажется, люди не понимают вопрос. Я попробую еще раз. Предположим, я делаю следующее: QLabel* label = ... label->setText("This <b>is</b> a <h3>Header</h3>"); Вопрос: какие шрифты будут использоваться для рендеринга текста надписи? Как я могу их контролировать? Есть ли способ указать, скажем, размер шрифта по умолчанию для заголовков? Edit3: Томи предложил использовать QTextDocument :: setDefaultStyleSheet. Но это всего лишь обходной путь. Я должен вручную применить стиль CSS ко всем QTextEdits (а не QLabels) в интерфейсе. И вопрос был: как узнать таблицу стилей по умолчанию? QTextDocument :: setDefaultStyleSheet просто переопределяет его для одного объекта QTextDocument. Может быть, QTextDocument :: defaultStyleSheet возвращает его? У меня сейчас нет компьютера с установленной Qt, поэтому я не могу его проверить.

Ответы [ 4 ]

3 голосов
/ 20 августа 2009

То, что вы хотите, не может быть сделано с помощью QLabel. QLabel предназначен для хранения основных текстовых меток - его поддержка HTML довольно ... веревочная.

Однако вы можете достичь этого, используя QTextEdit & QTextDocument.

Попробуйте что-то вроде этого (я пишу это по памяти, поэтому оно может не скомпилироваться или быть на 100% правильным):

QTextDocument *doc = new QTextDocument(this);
doc->setDefaultStyleSheet("h3 { font-color: red; }");
QTextEdit *edit = new QTextEdit(this);
edit->setDocument(doc);
edit->setHTML("this is a red <h3>heading</h3>");

Важным моментом является использование QTextDocument, который позволяет изменять таблицу стилей HTML. Из документации QT:

The default style sheet is applied to all newly HTML formatted text that is inserted into the document, for example using setHtml() or QTextCursor::insertHtml().

The style sheet needs to be compliant to CSS 2.1 syntax.

Note: Changing the default style sheet does not have any effect to the existing content of the document.

см. Здесь для получения дополнительной информации

Edit:

Чтобы получить таблицу стилей по умолчанию, вы можете вызвать QTextDocument::DefaultStyleSheet() - однако это относится только к QTextDocuments и может относиться или не применяться ко всем элементам управления Qt (включая QLabel).

2 голосов
/ 31 мая 2009

Как уже упоминалось в других ответах, вы можете сделать это для стилей виджетов, но не для тегов HTML. Единственный способ сделать это - установить индивидуально стили CSS в свойстве виджетов text.

Qt использует механизм форматированного текста для рендеринга тегов HTML, которые определены в соответствии с правилами в спецификации HTML 4. См. Поддерживаемое подмножество HTML

Если вам нужен только один стиль для всех ваших ярлыков, почему бы не установить его, используя setStyleSheet(), например:

MainWindow w;    
w.setStyleSheet("QLabel{font-size:20px; color:purple;};");

Если вы не хотите использовать более одного стиля внутри своих ярлыков (например: " Больше , чем one style"), это правильный способ сделать это.

1 голос
/ 31 мая 2009

Посмотрите на Qt Документация по таблицам стилей

Возможно, вы можете использовать QApplication::setStyleSheet() или QWidget::setStyleSheet(), чтобы сделать это.

0 голосов
/ 19 августа 2009

В последнем QT, т. Е. На QT4. Приведенные выше ответы работают. Скажите, с какой версией QT вы работаете ... Попробуйте следующее ...

 QLabel{
     border: 2px solid green;
     border-radius: 4px;
     padding: 2px;
     background-image: url(images/welcome.png);
 }

ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...