crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> GSS против property?
Mae Stro
  опции профиля:
сообщение 13.8.2009, 22:01
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 13.8.2009
Пользователь №: 1002

Спасибо сказали: 0 раз(а)




Репутация:   0  


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

Вопрос, как настроить Qt так, чтоб смена property таки отображалась стилями GSS?

У меня есть несколько однотипных кнопок на форме (наследники QPushButton). Задумалось мне выделить последнюю нажатую кнопку.

Задал переменную в классе:

QPushButton * bt_selected;            // текущая выбранная кнопка стадии


в эвенте на клик по кнопке прописал (bt - указатель на нажатую кнопку):

    if ( bt_selected )
        bt_selected->setProperty("stage_active", false);    // снимаем "избранность" с кнопки

    ( bt_selected = bt )->setProperty("stage_active", true);


в файле стиля:

QPushButton[stage_active="true"]
{
    border: 1px solid palette(shadow);
}



и... ничего. Проперти меняются, выделение цветом бордюра отсутствует. Только если выставить проперти до первого show() формы - тогда они есть. Смена проперти в рантайме игнорится, стиль кнопок не меняется.

Ок, может быть, Qt не работает с динамическими свойствами? Определил свойство через Q_PROPERTY.


    Q_PROPERTY(bool stage_active READ stage_active WRITE set_stage_active)

    bool active;

public:
    void set_stage_active(bool stage_active) { active = stage_active; }
    int stage_active() const { return active; }


Ведь статику то движок перерисовывает, видно хотя бы по enabled! Реакция - ноль, стили не меняются.

Ок, смодил код нажатия на кнопку:


    if ( bt_selected )
    {
        bt_selected->setProperty("stage_active", false);    // снимаем "избранность" с кнопки
        bt_selected->setStyleSheet(QString("*{}"));
    }

    ( bt_selected = bt )->setProperty("stage_active", true);
    bt_selected->setStyleSheet(QString("*{}"));


то есть тупо присваиваю абстрактный стиль кнопке. ЗАРАБОТАЛО, стили начали меняться. Но ведь это ДЕЙСТВИТЕЛЬНО ТУПОЕ РЕШЕНИЕ.

Как правильно решить вопрос?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Tonal
  опции профиля:
сообщение 14.8.2009, 6:57
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Мне кажется, что update() - вполне правильное решение.
Правда звать его нужно в коде установки свойства: set_stage_active.
А как иначе движек узнает о том, что свойство изменилось и нужно перерисовать виджет?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 12.12.2024, 14:47