最短版本:
mainWindow->setEnabled(false);
禁用整個窗口。
較短版本的代碼:
for(auto *widget : this->findChildren<QWidget *>())
{
widget->setEnabled(false);
}
findChildren
需要你想找到,而不是類型QMainWindow
類型。由於GUI元素繼承QWidget
您需要搜索它們。
更換this
的指針你QMainWindow
,除非你實現這個所述類。
也可以變成一個功能:
bool disable(QObject *object)
{
auto success { false };
if(object)
{
for(auto *widget : object->findChildren<QWidget *>())
{
widget->setEnabled(false);
}
success = true;
}
return success;
}
在QMainWindow
然後調用disable(this);
。
findChildren<QWidget *>(QRegularExpression { "p.*" }) // to disable all items starting with "p"
findChildren
也需要一個正則表達式,所以如果你只是想禁用某些項目,你可以在自己的名稱中指定一些獨特的東西,並選擇他們這樣。
加長版:
void disableAll(QObject *item)
{
if(item)
{
auto children { item->children() };
for(auto *child : children)
{
auto *widget { qobject_cast<QWidget *>(child) };
if(widget)
{
// recursive approach might/shouldn't be needed
// as all children of each item automatically get disabled
// if their parent is disabled.
disableAll(child);
widget->setEnabled(false);
}
}
}
}
您可以通過指針傳遞到您希望開始禁用元素調用它在你的窗前,彷彿這disableAll(this);
或乾脆。
謝謝你的答案。最短的版本不允許我再次啓用按鈕。有什麼建議麼! – CroCo
@CroCo這是因爲父母仍然被禁用。如果你想具體的元素被禁用,而不是所有你必須與更換'QWidget的*'部分例如'這個 - > findChildren()',然後將禁用所有'只有QPushButton'。 –
deW1
這再次感謝工作但這種解決方案是有點乏味,因爲我需要考慮的所有部件(即QPushButton,的QTextEdit,...等)在我的GUI。是否有一種先進的方法來處理一個電話中的問題? – CroCo