Я строю небольшую программу в Qt с помощью меню (menuBar) с использованием С++, и мне хотелось бы знать, как серой (например, отключить) элемент меню, когда активируется определенная переменная. Возможно ли это?
Как вырезать пункт меню в Qt
Ответ 1
Если вы знаете индекс соответствующего QAction:
QMenu::actions.at(i).setEnabled(false);
P.S. Как любезно предложено ниже, setEnabled(bool)
и setDisabled(bool)
являются слотами (так что это toggle()
), поэтому они могут быть подключены к сигналу, указывающему на необходимость изменения доступности действия.
Ответ 2
Ищите индекс действия не обязательно удобно. Если вы создали интерфейс с редактором формы QtCreator, у вас будет действие для каждого элемента меню. Их имена основаны на тексте, который вы впервые даете действиям. Например, если вы интерактивно вводите элемент меню с заголовком Foo Bar, то для вас создается действие с именем actionFoo_Bar. Просто введите ui- > action в редакторе кода и посмотрите, что предложит QTCreator для "имени".
В таком случае я бы назвал такой вызов:
ui->actionFoo_Bar.setEnabled(false);
Вы даже можете удалить элемент меню с помощью
ui->actionFoo_Bar.setVisible(false);