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

时间:2016-01-19 22:45:21

标签: qt layout

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

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

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

2 个答案:

答案 0 :(得分:7)

  

我想让某些布局中的小部件无法访问,因此用户会这样做   无法改变任何布局的小部件的状态(我想要   一切都变灰了。)

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

  

void QLayout::setEnabled(bool enable)

     

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

     

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

     

默认情况下,所有布局均已启用。

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

  

Disabling a widget隐式禁用其所有子节点。启用   分别启用所有子窗口小部件,除非它们已经存在   明确禁用。它不可能明确地启用一个孩子   窗口小部件,当其父窗口小部件保持禁用状态时,它不是窗口。

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

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

答案 1 :(得分:0)

我遇到了一个与此问题有关的问题:当我禁用布局时,处于设计模式的QTCreator会禁用布局上的小部件。每个孩子都有财产"Enabled":false。而且以编程方式启用布局并不能启用所有子项。

禁用/启用布局上的所有小部件(或仅所有子小部件)的方法:

for(auto&& child:ui->parentLayout->findChildren<QWidget *>()){
child->setEnabled(false);
}