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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как в кнопке убрать градиент?  (Прочитано 2465 раз)
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« : Март 04, 2015, 11:15 »

Добрый день. Поставил вот себе задачу написать некую функцию, которая дает возможность либо устанавливать градиент на виджет, либо убирать его (в функцию буду просто передавать true или false). К примеру возмем кнопку, у нее градиент установлен по умолчанию. Самый простой способ это узнать какой цвет у градиента, и вместо него в стиле задать просто цвет, а не градиент; ну и наоборот если градиент не установлен. Думаю так же можно сделать и для остальных виджетов.
Но как всегда прежде чем что-то мудрить, лучше узнать, может данная возможность уже имеется? К примеру в некоторых других средах существует флаг, который отвечает за то прозрачна ли заливка(градиент) или нет.
Есть ли у кого-нибудь какие-то советі по єтомиу поводу?
Записан
Hrundel
Гость
« Ответ #1 : Март 04, 2015, 18:30 »

Задача выглядит очень расплывчато. Если хочешь убрать градиент из стандартной кнопки, то это занятие с переопределением paintEvent для QButton.
Легче в этом случае написать собственную кнопку, которая будет больше уметь.
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #2 : Март 05, 2015, 10:59 »

Задача выглядит очень расплывчато. Если хочешь убрать градиент из стандартной кнопки, то это занятие с переопределением paintEvent для QButton.
Легче в этом случае написать собственную кнопку, которая будет больше уметь.
Да, можно было создать собственный виджет. Но проблема в том, что я переписую с Photon на Qt одно приложение, там как раз имеется подобная функция, которая в зависимости от установленного значения флага Pt_FLAT_FILL устанавливает, либо убирает заливку (градиент) виджетов (для кнопки, панели, виджета, и ряда других).
Я придумал как к примеру убирать градиент с виджета, и снова его возвращать. Но я для этого использую qss, и соответственно значения градиента там задаю явно. Так же имеется проблемка с тем как узнать 2 цвета для градиента (пока знаю просто как узнать цвет background-color).
Убираю градиент следующим образом: считываю через палитру виджета цвет background, в QString считываю qss стиль виджета, и используя функцию  setStyleSheet(QString) задаю считаный ранее background-color цвет. Таким образом градиент теряется, так как задан новый стиль виджета.
Добавляю градиент для виджета подобным образом, только в стиле задаю стандартный мною выбранный градиент. Вот только со цветом и градиентом пока возникает проблемма. Для градиента нужно 2 цвета, а у меня один, я попробовал использовать в качестве второго - white(а если виджет будет белым, то не покатит).
Код:
set_fill_flat(unsigned flag, unsigned on)
{
        QColor col1;
        QString temp;
        QPalette pall;

        if(flag == RA_FLAT_FILL){
            if(on == RA_ON)
            {
                pall = wgt->palette();
                col1 = wgt->palette().background().color();
                temp = wgt->styleSheet();
                temp += wgt->metaObject()->className();
                temp += "{background-color: %1}";
                wgt->setStyleSheet(QString(temp).arg(col1.name()));
            }
            else if(on == RA_OFF)
            {
                pall = wgt->palette();
                col1 = wgt->palette().background().color();
                temp = wgt->styleSheet();
                temp += wgt->metaObject()->className();
                temp += "{background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 %1, stop:1 white);}";
                wgt->setStyleSheet(QString(temp).arg(col1.name()));
            }
        }
}

Так же для кнопки нужно ж еще задавать стиль для checked  и passed. Тоесть эту функцию нужно усовершенствовать.  Можно добавить и заокругленность. Знать бы как узнать все стандартные параметры стиля имеющего виджета.
Если у кого будут идеи по даному поводу, пишите.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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