LINUX.ORG.RU

Не могу изменить цвет фона у QWidget

 ,


0

1

Пытаюсь так:

QPalette p(palette());
p.setColor(QPalette::Background, QColor(122,222,222,240));
setAutoFillBackground(true);
setPalette(p);

Правда этот код находится в конструкторе. Может так не стоит делать?
Впрочем, я перепробовал штук 5 разных кусков кода в разных местах разными способами — полдня вчера убил на такую мелочь. Ни в какую.

★★☆
Ответ на: комментарий от hippi90

Нет, не получается.
Я тут с цветами поигрался и заметил, что когда стоит QPalette::Background, то не просто ничего не происходит, а в этот цвет окрашивается окантовка(!) QProgressBar, который расположен на окрашиваемом виджете.
Всё чудесатей и чудесатей...

Stahl ★★☆
() автор топика
Ответ на: комментарий от Stahl

Это так, замечание. Background опредено как Background = Window. Просто в новом коде желательно использовать Window.

grondek
()

Виджет добавлен на MainWindow, в виджет заброшен QProgressBar. Все работает.

#include "mw.h"
#include "ui_mw.h"

MW::MW(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MW)
{
    ui->setupUi(this);

    QPalette p(ui->widget->palette());
    p.setColor(QPalette::Background, QColor(122,222,222,240));
    ui->widget->setAutoFillBackground(true);
    ui->widget->setPalette(p);
}

MW::~MW()
{
    delete ui;
}
grondek
()
Ответ на: комментарий от grondek

Забавно. Раскрашиваемый виджет предназначается для впихивания в QListWidget.
Когда я попробовал отрисовать его вне QListWidget, то фон окрасился как нужно.
Видимо QListWidget как-то мешается.

Stahl ★★☆
() автор топика
Ответ на: комментарий от grondek

Целенаправленно нет. Я вообще не умею им пользоваться.

Stahl ★★☆
() автор топика
Ответ на: комментарий от Stahl

В конструкторе:

setStyleSheet( "background-color: #FFAA00;" );

После setItemWidget:

    QWidget *w = ui->listWidget->itemWidget( ui->listWidget->item( 0 ) );
    w->setAutoFillBackground(true);

Как запретить сбрасывать autoFillBackground я не помню, но как-то было можно вроде.

grondek
()
Последнее исправление: grondek (всего исправлений: 1)
Ответ на: комментарий от grondek

setStyleSheet( «background-color: #FFAA00;» );

Оно теперь почему-то закрашивает не только фон, но и незаполненную часть QProgressBar (та, которая белая обычно).
Это раз. А во-вторых как мне теперь менять цвет в рантайме? Возиться со строками?
Спасибо, конечно. Работает, но я пока ещё поэкспериментирую. Как оно слишком костыльно и по-вебовски.

Stahl ★★☆
() автор топика
Ответ на: комментарий от Stahl

о! вспомнил.

Тебе надо использовать не QPalette::Window, а Qpalette::Base и QPalette::AlternateBase. В QListWidget используются именно они.

То есть просто используй свой код с небольшой модификацией:

QPalette p(palette());
p.setColor(QPalette::Base, QColor(122,222,222,240));
p.setColor(QPalette::AlternateBase, QColor(122,222,222,240));
setAutoFillBackground(true);
setPalette(p);
grondek
()
Ответ на: комментарий от grondek

О! Работает.
Только в моём случае QPalette::AlternateBase ни на что не влият. Ни самостоятельно ни в связке с QPalette::Base.
Спасибо.
Жаль только что решение не очень пересекается со здравым смыслом и попахивает колдунством.

Stahl ★★☆
() автор топика
Ответ на: комментарий от Stahl

Если в QListWidget будет выставлен alternatingRowColors, то будет влиять.

grondek
()

Переопределяешь paintEvent и рисуешь что хочешь

annulen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.