如何遍历窗口中的所有小部件?

Posted

技术标签:

【中文标题】如何遍历窗口中的所有小部件?【英文标题】:How to iterate over all widgets in a window? 【发布时间】:2015-08-20 03:37:46 【问题描述】:

我知道对于 QObject,有一种方法可以找到所有被认为是子级的 QObject - 但我不知道这是否意味着我能够在 MainWindow 中找到所有小部件。另外,我不想找到任何非小部件。

我问是因为我试图将窗口设置为半透明,而背景颜色显然没有应用于所有小部件。然而,我将它应用到我能想到的每一个小部件上。我不想更改全局不透明度 - 文本应该保持不透明。

下图有设置半透明的代码,以及窗口本身的图片。如您所见,文本编辑区域是彩色的。但我也在设置它(它是“Ed”),所以我不知道为什么!

Pic of the code and the window.

【问题讨论】:

【参考方案1】:

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

【讨论】:

您已经正确回答了我的问题。不幸的是,我仍然无法得到我想要的结果。我从 MainWindow 中迭代 findChildren,然后从我找到的每个子对象中迭代。我给了他们一个调色板,基础和前景设置为透明。而且,第一个选项卡中的 QTextEdit 仍然具有不透明的背景。 @SaburoutaMishima 我迟到了,但你真的应该使用 QSS(Qt 版本的 CSS)。它允许您为应用程序批量设置样式,包括按钮、滚动条或组合框等复杂的东西。 @Zato 我感谢您的回复。我能够解决这个问题。我也不认为 CSS 可以替代以编程方式访问子对象。谢天谢地,我不需要它。 为了完整起见,因为我是从 google 来到这里的,请注意,如果您有某个 QWidget 子类要查找,请将其传递给 findChildren 的模板类。跨度>

以上是关于如何遍历窗口中的所有小部件?的主要内容,如果未能解决你的问题,请参考以下文章

如何以闪亮的方式遍历多个上传小部件?

在应用程序窗口的顶部绘制叠加层

QT:如何关闭同一个小部件的多个窗口?

如何从 QStackedWidget 中删除所有小部件?

如何在 Qt 中的弹出窗口小部件上创建平滑的圆角

如何在 Qt 中将消息从子窗口小部件发送到父窗口?