如何迭代窗口中的所有小部件?

3
我知道对于QObject,有一种方法可以找到所有被认为是它的子代的QObjects - 但我不知道这是否意味着我能够找到MainWindow中的所有窗口小部件。另外,我不想找到任何非窗口小部件。
我之所以问是因为我正在尝试使一个窗口半透明,并且背景颜色显然没有应用到所有窗口小部件上。然而,我已经把它应用到我能想到的每个窗口小部件上了。我不想改变全局不透明度 - 文本应该保持不透明。
下面的图片显示了设置透明度的代码以及窗口本身的图片。正如你所看到的,文本编辑区域是彩色的。但我也设置了它(它是“Ed”),所以我不知道为什么会出现这种情况!
代码和窗口的图片请参考链接:代码和窗口的图片。
1个回答

7
您可以使用QObject::findChildren<QWidget*>()来查找所有子小部件。

你正确地回答了我的问题。不幸的是,我仍然无法得到我想要的结果。我正在从MainWindow迭代查找子项,然后从每个找到的子项中查找对象。我给它们所有人一个调色板,将Base和foreground都设置为透明。但是,第一个选项卡中的QTextEdit仍然有不透明的背景。 - SaburoutaMishima
1
@SaburoutaMishima 我来晚了,但你真的应该使用QSS(Qt版本的CSS)。它允许您为应用程序设置大量样式,包括按钮、滚动条或组合框等复杂的东西。 - Tomáš Zato
@Zato,感谢您的回复。我已经解决了这个问题。我也不认为CSS可以替代编程能力来访问子对象。幸运的是,我并不需要它。 - SaburoutaMishima
为了完整起见,因为我从谷歌搜索中到达这里,请注意,如果您正在寻找特定的QWidget子类,请将其传递给findChildren的模板类。 - Phlucious

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