Russian Qt Forum
Ноябрь 25, 2024, 14:13 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Style sheets  (Прочитано 5778 раз)
braboar
Гость
« : Июнь 17, 2011, 14:20 »

Доброго времени суток всем!

Сделал вот такой тест, по нажатию check'а должен меняться цвет фона у label:
Код:
Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog)
{
    ui->setupUi(this);
    ui->label->setProperty("alarm", false);

    QString css = QString("QLabel { border: 1px solid yellow;\n");
    css += "background-color: gray;\n";
    css += "color: yellow\n}\n";
    css += "QLabel[alarm=\"true\"] { background-color: red }\n";
    css += "QLabel[alarm=\"false\"] { background-color: gray }\n";
    ui->label->setStyleSheet(css);
    bool al = ui->label->property("alarm").toBool();
    qDebug("al=%d", al);
}

void Dialog::on_checkBox_toggled(bool checked)
{
    if (checked)
    {
        ui->label->setProperty("alarm", true);
    }
    else
    {
        ui->label->setProperty("alarm", false);
    }
    bool al = ui->label->property("alarm").toBool();
    qDebug("al=%d", al);
}
а ничего не меняется. Что я делаю не так?
« Последнее редактирование: Июнь 23, 2011, 11:52 от braboar » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Июнь 17, 2011, 14:36 »

Имхо, так будет проще:
Код
C++ (Qt)
#if 0
   QString css = QString("QLabel { border: 1px solid yellow;\n");
   css += "background-color: gray;\n";
   css += "color: yellow\n}\n";
   css += "QLabel[alarm=\"true\"] { background-color: red }\n";
   css += "QLabel[alarm=\"false\"] { background-color: gray }\n";
   ui->label->setStyleSheet(css);
#else
   ui->label->setStyleSheet(
       "QLabel { border: 1px solid yellow;"
       "background-color: gray;"
       "color: yellow }";
       "QLabel[alarm=\"true\"] { background-color: red }"
       "QLabel[alarm=\"false\"] { background-color: gray }"
  );
#endif
 
Записан

Qt 5.11/4.8.7 (X11/Win)
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #2 : Июнь 17, 2011, 15:09 »

Сделал вот такой тест, по нажатию check'а должен меняться цвет фона у label:
а ничего не меняется. Что я делаю не так?
Подозреваю, что стиль при изменении проперти не пересчитывается.
Попробуйте в конце on_checkBox_toggled стиль «передёрнуть»:
Код
C++ (Qt)
ui->label->setStyleSheet( ui->label->styleSheet() );
Записан
braboar
Гость
« Ответ #3 : Июнь 17, 2011, 15:59 »

LisandreL, именно так, спасибо, заработало!  Улыбающийся
Весьма благодарен!

Стили задаются во время создания элемента?
Нет ли операции вроде 'update'  или 'repaint'?
« Последнее редактирование: Июнь 17, 2011, 16:30 от braboar » Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #4 : Июнь 17, 2011, 16:37 »

Нет ли операции вроде 'update'  или 'repaint'?
Есть и тот и тот. Пересчитывают ли они стили я думаю вы и сами сможете.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.244 секунд. Запросов: 22.