我想让某些布局中的小部件无法访问,因此用户无法更改任何布局小部件的状态(我希望所有内容都变灰)。 我创建了一个SIGNAL / SLOT,该方法被称为:
void MyWidget::slot( bool bChecked )
{
myLayout->setEnabled(bChecked);
std::cout << "OnAllToggled: " << bChecked <<
", isEnabled: " << myLayout->isEnabled() << std::endl;
}
除了布局仍可访问外,一切都很棒。显然我不明白setEnabled
方法的含义。
问题:setEnabled
的含义是什么?如何使布局无法访问?谢谢!
答案 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);
}