一个 QSplitter 并找到当前的小部件

Posted

技术标签:

【中文标题】一个 QSplitter 并找到当前的小部件【英文标题】:A QSplitter and finding the current widget 【发布时间】:2012-11-28 16:04:44 【问题描述】:

我有一个 QSplitter,里面有四个 QTextEdit 小部件。我知道我可以使用 QObject::findChildren 来接收一个包含小部件内所有小部件的列表(在我的情况下是 QSplitter),但我不知道如何确定哪个是当前的?

【问题讨论】:

成为现在的人是什么意思?有焦点的QTextEdit? 是的,有焦点的那个。 不要认为 QSplitter 中有方法可以做到这一点,但也许 QApplication::focusWidget() 帮助:doc.qt.digia.com/qt/qapplication.html#focusWidget 实际上,Daniel Castro 的问题帮助了我,我尝试使用 hasFocus() 方法并且它有效。谢谢! [已解决] 考虑编写解决方案作为答案,以便其他有相同问题的人可以轻松看到 :) 【参考方案1】:

正如 cmets 中所说,您正在寻找带有焦点的 QTextEdit,所以基本上有两个选项:

    使用 QApplication::focusWidget() (http://doc.qt.digia.com/qt/qapplication.html#focusWidget) 循环遍历您的 QSplitter 的每个子节点并为每个子节点调用 hasFocus(),这样您就可以知道哪个子节点具有焦点(键盘焦点)

第一种方法的主要缺点是您无法确定(直接使用它)该小部件是否属于 QSplitter。第二种方法可能听起来有点效率低下,但如果您的 QSplitter 没有很多小部件,那么它会非常好。

正如 cmets (of the OP) 所指出的,您选择了第二种方法,我是在这里发布答案的人,因为 OP 没有足够的声誉来回答他的问题。

【讨论】:

以上是关于一个 QSplitter 并找到当前的小部件的主要内容,如果未能解决你的问题,请参考以下文章

获取应用程序的小部件树

QSplitter 显示两个小部件之间的分隔线或边距

从 QSplitter 中删除小部件

在 QSplitter 中带有 QWidget 的 QScrollArea

如何隐藏 QSplitter 小部件中的句柄?

显示当前小部件类之外的小部件