【问题标题】:How to get widget background QColor如何获取小部件背景QColor
【发布时间】:2013-03-09 07:45:28
【问题描述】:

我正在尝试找出QWidgetQGLWidget 的背景颜色,以便我可以将它与qglClearColor() 一起使用,以使OpenGL 部分以本机方式出现在小部件中(例如没有黑色背景)。

我想我可以获取我的小部件的backgroundRole(),但我在将其转换为QColor 时遇到问题。有QPalette::color(QColorRole),但它不是静态的,我不知道如何创建QPalette 的实例来进行转换。

【问题讨论】:

  • 您是否尝试调用qApp->palette() 来获取应用程序范围的调色板,然后调用QPalette::brush()QPalette::color()

标签: qt qwidget


【解决方案1】:

使用QWidget::palette().color(QWidget::backgroundRole())接收该小部件的背景颜色角色的颜色。显然,这也适用于任何继承 QWidget 的类。

【讨论】:

  • 您对qglClearColor 的调用不在您的 QGLWidget 子类的构造函数中,对吧?它应该在 intializeGL、paintGL 或任何其他只能在您的 OpenGL 上下文建立后调用的函数中。
  • 是的,它在initializeGL中。我忘记将glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 添加到paintG()
  • 嗯...我正在尝试使用继承QPlainTextEdit 的控件,但它似乎不起作用(auto cr = pte->backgroundRole(); QPalette p = pte->palette(); QColor col = p.color(cr);)。我不知道我是否错过了什么。我发现了一些用于设置其背景的代码,它们完全不同但可以工作(至少在我测试过的 Windows 上):stackoverflow.com/a/1532179/964053。我试过得到这样的颜色:ui->plainTextEdit->palette().base().color(),但我的印象是这并不总是有效。所以,混淆了整个 Qt 调色板类...
猜你喜欢
  • 1970-01-01
  • 2014-05-25
  • 2015-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
相关资源
最近更新 更多