2016-05-26 5 views
2

У меня есть QGraphicsScene и добавьте QlineEdit, но изменение цвета просто не работает.Как изменить цвет фона QLineEdit в QGraphicsScene

QGridLayout *layout = new QGridLayout(this); 
QGraphicsView *view = new QGraphicsView(this); 
QGraphicsScene *scene = new QGraphicsScene(this); 

QWidget *widget = new QWidget(); 
QGridLayout *widgetLayout = new QGridLayout(this); 
QLineEdit *le1 = new QLineEdit(widget); 
QLineEdit *le2 = new QLineEdit(widget); 
widgetLayout->addWidget(le1,1,0); 
widgetLayout->addWidget(le2,2,0); 
widget->setLayout(widgetLayout); 



QPalette paletteRed = le1->palette(); 
paletteRed.setColor(QPalette::Background,Qt::red); 

QPalette paletteGreen = le1->palette(); 
paletteGreen.setColor(QPalette::Background,Qt::green); 


le1->setAutoFillBackground(true); 
le1->setPalette(paletteRed); // not working 
widget->setPalette(paletteGreen); // working 


view->setScene(scene); 
scene->addWidget(widget); 

ui->centralWidget->setLayout(layout); 
layout->addWidget(view); 

Должен ли я вызвать что-то вроде update() (который не работает либо, чтобы получить другой цвет), если виджет в сцене?

EDIT:

создал новый пример кода.

Я знаю, что это работает в обычном QWidget. На самом деле код работает нормально, если я разместил QLineEdit в обычном QFrame и т. Д. , но его в QGraphicsScene. И в этом частном случае его не работает. Текст и цвет выделения и т. Д. Также отлично работают. Но backgroud/base/etc ist нет.

+0

Где код смены цвета? – perencia

+0

Изменение 'QPallette'? –

+0

Попытайтесь использовать таблицы стиля qt – Fabio

ответ

2

Настройка цвета фона через QPalette не для моего виджета, почему?

Обычно это свойство autoFillBackground не установлено равным true, что позволяет устанавливать фоновый эффект самостоятельно.

QPalette palette = pWidget->palette(); // fixed it (need to initialize) 
palette.setColor(pWidget->backgroundRole(), bkgndColor); // for background (fixed) 
palette.setColor(pWidget->foregroundRole(), fgrndColor); // for foreground 
pWidget->setAutoFillBackground(true); // to allow to fill the background 
pWidget->setPalette(palette); 

Установка фона с помощью таблицы стилей также может работать, потому что это заставляет режим autoFillBackground == true.

+0

'QPalette :: Background' следует заменить на' pWidget-> backgroundRole() '. Информация здесь: http://doc.qt.io/qt-5/qwidget.html#backgroundRole –

+0

@JonHarper Правильно, лучше получить фактическую роль фона. Затем создаем исправления в моем собственном коде. Правильно! – AlexanderVX

+0

@AlexanderVX это istn рабочий. Он работает в обычных случаях, например, для 'QFrame', а также для' QLineInput', если используется в обычном виджете. Но если я ставлю 'QGraphicsScene', он не работает –

1

Я хотел бы предложить небольшую модификацию ответа AlexanderVX. В первой строке я написал бы:

QPalette palette = pWidget->palette(); 

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

С уважением.

+0

Это был пропущенный, правый. – AlexanderVX

0

У меня был подобный вопрос, где цвет фона только цветной контур:

enter image description here

проблема была, что существует множество границ изображения. После установки border-image: none; цвет фона появился

Смежные вопросы