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("*{}"));


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

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


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Я думаю речь все таки о CSS, а не GSS.

Цитата(Mae Stro @ 13.8.2009, 23:01) *
ЗАРАБОТАЛО, стили начали меняться. Но ведь это ДЕЙСТВИТЕЛЬНО ТУПОЕ РЕШЕНИЕ.


Я писал по этому поводу троллям, их официальный ответ был "This is not a bug." и привели мне код, который совершенно не в кассу. Типа я не умею готовить кошек. Может быть есть смысл еще раз напомнить об этом? Создай еще один багрепорт.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Mae Stro
  опции профиля:
сообщение 13.8.2009, 23:20
Сообщение #3


Новичок


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

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




Репутация:   0  


Цитата(SABROG @ 13.8.2009, 23:08) *
Я думаю речь все таки о CSS, а не GSS.


виноват, свой приватный термин опубликовал :) Все-таки CSS больше к HTML идет и в Qt юзается, а эти стили к движку предназначены.

А что за код прислали? Если из доков, то это нуль.

еще вариант - раскапывая setStyleSheet...

так тоже работает... но увы, все ручная сборка

    ( bt_selected = bt )->setProperty("stage_active", true);
    bt_selected->style()->polish(bt);
    bt->update();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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




RSS Текстовая версия Сейчас: 16.11.2024, 5:24