Задача выглядит очень расплывчато. Если хочешь убрать градиент из стандартной кнопки, то это занятие с переопределением 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. Тоесть эту функцию нужно усовершенствовать. Можно добавить и заокругленность. Знать бы как узнать все стандартные параметры стиля имеющего виджета.
Если у кого будут идеи по даному поводу, пишите.