2017-07-10 10 views
1

Comment donner checkable article QMenu utilisant QTComment faire QMenu article checkable 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)); 

Sur QAction j'ai appelé sous "slotActionTriggered (QAction * actionSelected)"

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

Comment montrer petit TICK dans le menu sélectionné # pour que l'utilisateur sache lequel est sélectionné Actuellement, je peux passer à tous les numéros de menu, mais je dois cocher une petite case dans le menu pour que l'utilisateur sélectionné soit facilement identifié

+1

Voir [ 'QAction :: setCheckable'] (http://doc.qt.io/qt-5/qaction.html#checkable-prop) et ['QAction :: setChecked'] (http://doc.qt.io/q t-5/qaction.html # checked-prop). –

+0

J'ai essayé les deux mais ça ne donne aucun effet, est-ce que je dois garder une image pour ça? – Sijith

+0

S'il vous plaît modifier votre question pour montrer ce que vous avez essayé. –

Répondre

2

exemple Petit:

enter image description here

cmainwindow.h

#ifndef CMAINWINDOW_H 
#define CMAINWINDOW_H 

#include <QMainWindow> 
#include <QPointer> 

class CMainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    CMainWindow(QWidget *parent = 0); 
    ~CMainWindow(); 

private slots: 
    void slot_SomethingChecked(); 

private: 
    QPointer<QAction> m_p_Act_Button1 = nullptr; 
    QPointer<QAction> m_p_Act_Button2 = nullptr; 
}; 

#endif // CMAINWINDOW_H 

cmainwindow.cpp

#include "cmainwindow.h" 
#include <QtWidgets> 
#include <QDebug> 

CMainWindow::CMainWindow(QWidget *parent) 
    : QMainWindow(parent) 
{ 
    m_p_Act_Button1 = new QAction("Super Button 1", this); 
    m_p_Act_Button1->setCheckable(true); 
    m_p_Act_Button1->setChecked(true); 
    connect(m_p_Act_Button1, SIGNAL(triggered()), this, SLOT(slot_SomethingChecked())); 

    m_p_Act_Button2 = new QAction("Super Button 2", this); 
    m_p_Act_Button2->setCheckable(true); 
    m_p_Act_Button2->setChecked(true); 
    connect(m_p_Act_Button2, SIGNAL(triggered()), this, SLOT(slot_SomethingChecked())); 

    QMenu *p_menu = menuBar()->addMenu("My Menu"); 
    p_menu->addAction(m_p_Act_Button1); 
    p_menu->addAction(m_p_Act_Button2); 
} 

CMainWindow::~CMainWindow() { } 

void CMainWindow::slot_SomethingChecked() 
{ 
    if(!m_p_Act_Button1 || !m_p_Act_Button2) {return;} 

    qDebug() << "Hi"; 
    if(m_p_Act_Button1->isChecked()) 
    { 
     qDebug() << "The action 1 is now checked"; 
    } 
    else 
    { 
     qDebug() << "The action 1 is now unchecked"; 
    } 

    if(m_p_Act_Button2->isChecked()) 
    { 
     qDebug() << "The action 2 is now checked"; 
    } 
    else 
    { 
     qDebug() << "The action 2 is now unchecked"; 
    } 

}