crossplatform.ru

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


  Ответ в GSS против property?
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Mae Stro Дата 14.8.2009, 9:38
 
Цитата(SABROG @ 14.8.2009, 9:08) *
Цитата(Tonal @ 14.8.2009, 7:57) *
Мне кажется, что update() - вполне правильное решение.

Когда я пробовал в последний раз ни update() ни polish() результатов не давали.


ну, на 4.5.2 этот код работает

    Q_PROPERTY(bool stage_active READ stage_active WRITE set_stage_active)

    bool active;


...

    void set_stage_active(bool stage_active)
    {    active = stage_active;
        style()->polish(this);
        update();
    }
    int stage_active() const { return active; }


Цитата(Tonal @ 14.8.2009, 7:57) *
А как иначе движек узнает о том, что свойство изменилось и нужно перерисовать виджет?


Вообщето установка динамический свойств генерирует QDynamicPropertyChangeEvent
По идее, разработчики должны были туда внести перерисовку по обстоятельствам, с минимальными накладными расходами.

Однако у них там есть что-то, имеющее отношение к шрифтам - и все.

А style()->polish(...) - это примение кувалды, чтоб забить гвоздик.
SABROG Дата 14.8.2009, 8:08
 
Цитата(Mae Stro @ 14.8.2009, 0:20) *
А что за код прислали?

Цитата
This is not a bug. You should use something like this:

QCheckBox:checked
{
border:1 solid red;
}
QCheckBox
{
border: 1 solid green;
}

instead you are using QLineEdit, which will not apply to QCheckBox.

Best Regards,

--
George Liu, Release Engineer
Nokia, Qt Software


Цитата(Tonal @ 14.8.2009, 7:57) *
Мне кажется, что update() - вполне правильное решение.

Когда я пробовал в последний раз ни update() ни polish() результатов не давали.
Tonal Дата 14.8.2009, 6:57
  Мне кажется, что update() - вполне правильное решение.
Правда звать его нужно в коде установки свойства: set_stage_active.
А как иначе движек узнает о том, что свойство изменилось и нужно перерисовать виджет?
Mae Stro Дата 13.8.2009, 23:20
 
Цитата(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();
SABROG Дата 13.8.2009, 22:08
  Я думаю речь все таки о CSS, а не GSS.

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


Я писал по этому поводу троллям, их официальный ответ был "This is not a bug." и привели мне код, который совершенно не в кассу. Типа я не умею готовить кошек. Может быть есть смысл еще раз напомнить об этом? Создай еще один багрепорт.
Mae Stro Дата 13.8.2009, 22:01
  Доброго времени суток.

Вопрос, как настроить 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("*{}"));


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

Как правильно решить вопрос?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 0:32