2014-03-21 5 views
2

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

QLabel[foo = "warning"]{ color: red; } 
QLabel[foo = "success"]{ color: green; } 

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

label = new QLabel(this); 
label->setText("some text"); 
label->setProperty("foo", "warning"); 

// after some event 
label->setProperty("foo", "success"); 
// the label's color should be green now 

Я пропустил что-то, или изменение стиля может просто не работать таким образом?.

+0

Возможный дубликат [Действительно ли таблицы стилей Qt обрабатываются \ _dynamic \ _ свойства?] (Http://stackoverflow.com/questions/1595476/are-qts-stylesheets-really-handling-dynamic-properties) –

ответ

0

была такая же проблема в PyQT сегодня. Ни одно из предложений, найденных в SO, не работало, но в итоге работала с использованием каскадного характера таблиц стилей. В моем приложении, я имел приложение шириной таблицы стилей, которая бы стиль кнопки по-разному, когда они checked:

QToolButton { 
    background-color: #12313F; 
    background: #12313F; 
    color: #DEE8EC; 
    spacing: 0px; 
    border: none 
} 

QToolButton[checked="true"] { 
    background-color: #5B8AA1; 
    background: #5B8AA1; 
} 

Это установлено, что основную таблицу стилей, это питон, но, надеюсь, он получает эту идею через (я м чтения таблицы стилей в виде строки из style.css):

mainwindow.setStyleSheet(
    pkg_resources.resource_stream(__name__, 'style.css').read()) 

в моем коде checked свойства QAction детей на панели инструментов может измениться, и я хочу, панель инструментов, чтобы обновить и эту кнопку, чтобы быть выделен ,

Чтобы выполнить это (прошло много проб и ошибок), я переопределяю таблицу стилей моего объекта панели инструментов, которая является дочерним элементом главного окна. Оказывается, я даже не нужно ничего устанавливать, пустая строка достаточно:

toolbar.setStyleSheet("") 

Et Voila, панель инструментов отображается правильно. QT 4.8. YMMV в C++, но, надеюсь, он работает.

Смежные вопросы