如何获取小部件背景颜色QColor

16

我正在尝试找出 QWidgetQGLWidget 的背景颜色,以便将其与 qglClearColor() 一起使用,使OpenGL部分在widget中原生显示(例如没有黑色背景)。

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


1
你尝试调用 qApp->palette() 来获取应用程序范围的调色板,然后调用 QPalette::brush()QPalette::color() 吗? - user2155932
1个回答

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

你调用 qglClearColor 的代码不是在你的 QGLWidget 子类的构造函数中吧?它应该在 intializeGL、paintGL 或其他任何一个只能在 OpenGL 上下文建立之后才能调用的函数中。 - Sir Digby Chicken Caesar
是的,它在initializeGL中。我忘记在paintG()中添加glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - Nils Werner
嗯...我正在尝试使用继承了QPlainTextEdit的控件来实现这个,但它似乎不起作用(auto cr = pte->backgroundRole(); QPalette p = pte->palette(); QColor col = p.color(cr);)。我不知道是否遗漏了什么。我找到了一些设置其背景的代码,与之前完全不同却可行(至少在我测试的Windows上是这样):https://dev59.com/inI_5IYBdhLWcg3wF_B3#1532179。我尝试通过以下方式获取颜色:`ui->plainTextEdit->palette().base().color()`,但我的印象是这并非总是有效。所以这整个Qt调色板类感觉很混乱... - NoOne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接