メニューアイテム (QAction) の状態を切り替える

ドキュメントの状態によって、メニューアイテムの有効・無効、チェックの有無を切り替えたい時があります。Undoが出来ない時は、UndoアイテムはDisabledであるべきです。Qtのメニュー (QMenu) には、aboutToShow() という SIGNALがあるので、QMenuが表示される直前に、QMenuが保持しているQActionの状態を更新できます。

// onEditMenuでQActionの状態を切り替える
connect( ui->menu_Edit, SIGNAL(aboutToShow()), this, SLOT(onEditMenu()) );

メニューをクリックした処理はこれでOKです。が、ショートカットキーから呼び出す時に更新されないので、eventメソッドに処理を挟んでおきましょう。

bool MainWindow::event( QEvent *event )
{
  if (event->type() == QEvent::KeyPress)
  {
    onEditMenu();