Question

J'ajoute un tas de QActions aux menus de ma fenêtre principale. Ces actions peuvent également être déclenchées par le clavier, et je veux que le raccourci soit visible dans le menu, comme d'habitude, par exemple

-----------------
|Copy     Ctrl+C|
-----------------

Je peux le faire en utilisant QAction.setShortcut(). Cependant, I ne pas veulent que ces QActions à être déclenchées par les raccourcis; Je manipuler toutes les entrées du clavier séparément ailleurs.

Est-ce possible? Puis-je désactiver le raccourci dans le QAction mais encore le texte de raccourci (dans cet exemple Ctrl + C ) dans mes menus?

EDIT : La façon dont je fini par le faire se connecte aux événements aboutToShow() et aboutToHide() du menu et activer / désactiver les raccourcis afin qu'ils ne sont actifs que lorsque le menu est affiché. Mais je vous en serais reconnaissant une solution plus propre ...

Était-ce utile?

La solution

Vous pouvez hériter de QAction et passer outre QAction :: event (QEvent *):

class TriggerlessShortcutAction : public QAction
{
public:
    ...ctors...

protected:
    virtual bool event(QEvent* e)
    {
        if (e->type() == QEvent::Shortcut)
            return true;
        else
            return QAction::event(e);
    }
};

Cela entraînera des événements de type QEvent :: raccourci envoyé à vos actions pour ne pas déclencher les « déclenchées () » signaux.

Autres conseils

action.setText("Copy\tCtrl+C");

Cela ressemblera à une action avec un raccourci, mais le raccourci est pas réellement installé.

Voici un exemple complet:

#include <QtGui>

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);

    QMainWindow win;

    QMenu *menu = win.menuBar()->addMenu("Test");

    // This action will show Ctrl+T but will not trigger when Ctrl+T is typed.
    QAction *testAction = new QAction("Test\tCtrl+T", &win);
    app.connect(testAction, SIGNAL(triggered(bool)), SLOT(quit()));
    menu->addAction(testAction);

    // This action will show Ctrl+K and will trigger when Ctrl+K is typed.
    QAction *quitAction = new QAction("Quit", &win);
    quitAction->setShortcut(Qt::ControlModifier + Qt::Key_K);
    app.connect(quitAction, SIGNAL(triggered(bool)), SLOT(quit()));
    menu->addAction(quitAction);

    win.show();

    return app.exec();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top