我有QGraphicsScene
并添加了QlineEdit
,但更改颜色不起作用。
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()
之类的东西(它不能用于获取另一种颜色)?
修改
创建了新的示例代码。
我知道这适用于正常的QWidget
。实际上,如果我将QLineEdit
置于普通QFrame
等但中QGraphicsScene
,则代码可以正常工作。在这种特殊情况下它不起作用。文字和高亮颜色等也很好。但是背景/基础/等不是。
答案 0 :(得分: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
模式。
答案 1 :(得分:1)
我想建议对AlexanderVX的回答略作修改。在第一行我会写:
QPalette palette = pWidget->palette();
只是为了确保你只调整你需要的基础对象调色板。
问候。
答案 2 :(得分:0)