Qt:为 nextInFocusChain() 返回隐藏的小部件

Qt: Hidden widget being returned for nextInFocusChain()

我有两个复选框 (QCheckbox),有时我会隐藏第一个。调用 hide() 之后,我想检索父小部件的 nextInFocusChain() 。这 returns 第一个复选框,不管它是否隐藏。难道我做错了什么?我本以为隐藏的小部件不是焦点链的一部分,所以不应该返回它。

if (shouldHideFirstCheckbox) {
    firstCheckbox.hide();
}
QCheckBox* nextWidget = dynamic_cast<QCheckBox*>(nextInFocusChain());
// nextWidget is always firstCheckbox, regardless of whether it's hidden

简短回答:这是设计使然。

如果您查看 QWidget::setTabOrder() 的实现,您会发现未考虑小部件的可见性:https://code.woboq.org/qt5/qtbase/src/widgets/kernel/qwidget.cpp.html#6969