如何在QGraphicsScene

时间:2016-05-26 13:48:26

标签: c++ qt qgraphicsscene qlineedit

我有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置于普通QFrameQGraphicsScene,则代码可以正常工作。在这种特殊情况下它不起作用。文字和高亮颜色等也很好。但是背景/基础/等不是。

3 个答案:

答案 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)

我有一个类似的问题,背景颜色只是勾勒出轮廓:

enter image description here

问题是有一个边框图像集。设置border-image: none;后,背景颜色显示