如何在Qt中禁用属于布局的小部件?

TT_*_*TT_ 3 layout qt

我想在一些布局中使窗口小部件无法访问,因此用户将无法更改任何布局的窗口小部件的状态(我希望所有内容都变灰).我创建了一个SIGNAL/SLOT,该方法被称为:

void MyWidget::slot( bool bChecked )
{
  myLayout->setEnabled(bChecked);
  std::cout << "OnAllToggled: " << bChecked <<
    ", isEnabled: " << myLayout->isEnabled() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

一切都很好,除了布局仍然可访问.显然我不明白setEnabled方法的含义.问题:什么setEnabled意思是什么,如何使布局无法访问?谢谢!

Ale*_*r V 11

我想在一些布局中使窗口小部件无法访问,因此用户将无法更改任何布局的窗口小部件的状态(我希望所有内容都变灰).

并尝试禁用布局对象.当然,启用或禁用布局会影响窗口小部件彼此对齐的方式:

void QLayout :: setEnabled(bool enable)

如果enable为true,则启用此布局,否则禁用它.

启用的布局会动态调整以适应更改; 禁用的布局就好像它不存在一样.

默认情况下,启用所有布局.

相反,您可以尝试禁用某些父窗口小部件的所有子项:

禁用窗口小部件会隐式禁用其所有子窗口.除非已明确禁用所有子窗口小部件,否则分别启用它们.当父窗口小部件保持禁用状态时,无法显式启用不是窗口的子窗口小部件.

为此,您可以创建一些占用您正在讨论的布局的"容器"窗口小部件,并将嵌套布局添加到该窗口小部件以容纳所有窗口小部件.

QWidget* container = new QWidget;
myLayout->addWidget(container);   // put container widget in myLayout
QHBoxLayout* hboxLayout = new QHBoxLayout(container);
hBoxLayout->addWidget(widget1);
hBoxLayout->addWidget(widget2); 
hBoxLayout->addWidget(widget3);
container->setEnabled(false);     // disable all nested widgets
Run Code Online (Sandbox Code Playgroud)