How to make QMenu Item checkable in QT

Viewed 14261

How to give Qmenu item checkable using QT

QMenu *preferenceMenu = new QMenu();
preferenceMenu  = editMenu->addMenu(tr("&Preferences"));

QMenu *Mode1 = new QMenu();
Mode1  = preferenceMenu->addMenu(tr("&Mode 1"));
Mode1->addAction(new QAction(tr("&Menu1"), this));

QMenu *Mode2 = new QMenu();
Mode2  = preferenceMenu->addMenu(tr("&Mode 2"));
Mode2->addAction(new QAction(tr("&Menu2"), this));
Mode2->addAction(new QAction(tr("&Menu3"), this));

On QAction I called slot "slotActionTriggered(QAction* actionSelected)"

void csTitleBar::slotActionTriggered(QAction* actionSelected)
{
   actionSelected->setChecked(true);
}

How to show small TICK in the selected Menu# so that user can know which is selected Currently I am able to change to all Menu#, but I need to show a small tick on menu so that the selected one can be easly Identified

2 Answers

Modern connection syntax is preferable. Checkable items can also be used on context menu as follow :

void MyWidget::initContextMenu()
{
     if( _contextMenu)
     {
          delete _contextMenu;
     }

     _contextMenu = new QMenu(this);
     auto action1 = new QAction("Action Item 1", &_contextMenu);
     action1->setCheckable(true);
     action1->setChecked(getMyProperty1());
     connect(action1 , &QAction::triggered, this, &MyWidget::setMyProperty1);
     _contextMenu->AddAction( action1 );
}

void MyWidget::contextMenuEvent(QContextMenuEvent *event)
{        
    initContextMenu();      
    _contextMenu.popup(
            this->viewport()->mapToGlobal(
                event->pos()));         
}

bool MyWidget::setMyProperty1(bool state)
{
    _myProperty1 = state;
    emit MyPropertyChanged(_myProperty);
}
Related