crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Задать фон одному виджету на форме
borune
  опции профиля:
сообщение 7.10.2014, 15:25
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 152
Регистрация: 1.1.2011
Пользователь №: 2314

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




Репутация:   0  


сабж. Хочу сделать фоновое изображение для главного окна (ну или хотя бы просто цвет, если сделаю цвет, то и картинку поставить можно).

Пробую так:
MainWindow::Mainwindow(QWidget *parent):QMainWindow(parent)
{
...
setStyleSheet("background: green;");
...
}
У всех виджетов на форме становится зеленый фон. Читаю доки, пробую задать фон только объектам класса QMainWindow следующим образом:
int main(int argc, char **argv)
{
QApplication app(argc, argv);
...
MainWindow mainWin;
app.setStyleSheet("QMainWindow { background: green}");
...
}
эффект точно такой же - у всех зеленеет фон. Читаю еще, пробую задать свойства через имя объекта:
]int main(int argc, char **argv)
{
QApplication app(argc, argv);
...
MainWindow mainWin;
mainWin.setObjectName("main");
app.setStyleSheet("QMainWindow#main { background: green}");
...
}
тоже не помогает. Подскажите, как же сделать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
marsel
  опции профиля:
сообщение 8.10.2014, 9:22
Сообщение #2


Студент
*

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

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




Репутация:   0  


Вообще если честно, очень легко гуглится.
Или я не правильно понял вопрос?

    QPalette palette;
    palette.setColor(QPalette::Background, Qt::green);
    mainWin.setPalette(palette);
    mainWin.setAutoFillBackground(true);

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
borune
  опции профиля:
сообщение 8.10.2014, 17:10
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 152
Регистрация: 1.1.2011
Пользователь №: 2314

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




Репутация:   0  


Цитата(marsel @ 8.10.2014, 10:22) *
Вообще если честно, очень легко гуглится.
Или я не правильно понял вопрос?

    QPalette palette;
    palette.setColor(QPalette::Background, Qt::green);
    mainWin.setPalette(palette);
    mainWin.setAutoFillBackground(true);

Вопрос поняли правильно, а может и не совсем)
Ваш вариант делает то же самое, что и три варианта, которые я описал выше. Т.е. этот код задает зеленый фон ВСЕМ виджетам, находящимся на форме, а мне нужно задать фон ТОЛЬКО сАмому главному окну, не изменяя фон дочерних виджетов.

Сообщение отредактировал borune - 8.10.2014, 17:12
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 8.10.2014, 20:48
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

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




Репутация:   8  


А все дело в том, что когда вы перегружаете styleSheet или палитру у родительского виджета, перегружается и у дочернего.
Чтобы этого избежать надо явно переоределить перегруженные аттрибуты дочернего виджета:
    QPalette palette;
    QColor oldBackColor = palette.color( QPalette::Background );
    palette.setColor(QPalette::Background, Qt::green);

    this->setPalette(palette);

    palette.setColor( QPalette::Background, oldBackColor );
    ui->widget->setPalette( palette );
    ui->widget->setAutoFillBackground( true );

Так же нужно выставить аттрибут autoFillBackground для дочернего виджета.
Об autoFillBackground:
http://qt-project.org/doc/qt-4.8/qwidget.h...ouble-buffering
О наследовании палитры:
http://qt-project.org/doc/qt-4.8/qwidget.html#palette-prop

Сообщение отредактировал lanz - 8.10.2014, 20:49
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Trisch
  опции профиля:
сообщение 8.10.2014, 20:49
Сообщение #5


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

Группа: Участник
Сообщений: 379
Регистрация: 30.1.2012
Из: Запорожье
Пользователь №: 3169

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




Репутация:   0  


borune, Дело в том, что нельзя задать фон QMainWindow. Можно задать фон разделителям. Вот пример

Сообщение отредактировал Trisch - 8.10.2014, 20:49
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
borune
  опции профиля:
сообщение 9.10.2014, 6:53
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 152
Регистрация: 1.1.2011
Пользователь №: 2314

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




Репутация:   0  


Цитата(lanz @ 8.10.2014, 21:48) *
А все дело в том, что когда вы перегружаете styleSheet или палитру у родительского виджета, перегружается и у дочернего.
Чтобы этого избежать надо явно переоределить перегруженные аттрибуты дочернего виджета:
а если у меня дочерних 50 штук, для каждого такое городить?
Цитата(Trisch @ 8.10.2014, 21:49) *
Дело в том, что нельзя задать фон QMainWindow
как это нельзя) фон-то меняется) скажу больше - даже картинку можно на фон поставить

Сообщение отредактировал borune - 9.10.2014, 7:01
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Trisch
  опции профиля:
сообщение 9.10.2014, 13:01
Сообщение #7


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

Группа: Участник
Сообщений: 379
Регистрация: 30.1.2012
Из: Запорожье
Пользователь №: 3169

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




Репутация:   0  


Цитата(borune @ 9.10.2014, 6:53) *
Цитата(lanz @ 8.10.2014, 21:48) *
А все дело в том, что когда вы перегружаете styleSheet или палитру у родительского виджета, перегружается и у дочернего.
Чтобы этого избежать надо явно переоределить перегруженные аттрибуты дочернего виджета:
а если у меня дочерних 50 штук, для каждого такое городить?
Цитата(Trisch @ 8.10.2014, 21:49) *
Дело в том, что нельзя задать фон QMainWindow
как это нельзя) фон-то меняется) скажу больше - даже картинку можно на фон поставить


Тогда перефразирую свою фразу. В QMainWindow можно задавать фон, но не стоит. Дело в том что QMainWindow составной виджет, и задавая ему фон задается фон всем виджетам, которые в него входят и их наследникам соответственно.

Хочешь задать фон центральной части? Задай фон именно центральному виджету, к примеру так:
QWidget#centralwidget {background: rgb(0, 255, 255);}


Хочешь задать фон меню, задавай фон именно меню, и так далее.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
borune
  опции профиля:
сообщение 9.10.2014, 14:25
Сообщение #8


Участник
**

Группа: Участник
Сообщений: 152
Регистрация: 1.1.2011
Пользователь №: 2314

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




Репутация:   0  


Цитата(Trisch @ 9.10.2014, 14:01) *
Хочешь задать фон центральной части? Задай фон именно центральному виджету,

а толку, ведь любой виджет в окне является дочерним по отношению к центральному, поэтому изменение цвета центрального виджета вызовет изменения цвета у всех остальных виджетов
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Trisch
  опции профиля:
сообщение 9.10.2014, 17:28
Сообщение #9


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

Группа: Участник
Сообщений: 379
Регистрация: 30.1.2012
Из: Запорожье
Пользователь №: 3169

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




Репутация:   0  


Если задавать стиль по идентификатору, то стиль задается только виджетам с данным идентификатором, ну насколько я знаю :)

В общем попробуй, если не то, будем дальше думать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 9.10.2014, 18:37
Сообщение #10


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

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




Репутация:   8  


Цитата
а если у меня дочерних 50 штук, для каждого такое городить?

Не для каждого, а только для тех, которые непосредственно вложены в MainWindow.

Сообщение отредактировал lanz - 9.10.2014, 18:37
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 27.4.2024, 18:11