Domanda

Io sono l'aggiunta di un gruppo di QActions la mia finestra principale del menu.Queste azioni possono anche essere attivato da tastiera, e ho voglia di scelta rapida per essere visibile nel menu, come di consueto, ad es.

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

Posso fare questo utilizzando QAction.setShortcut().Tuttavia, Ho non desidera che questi QActions per essere attivato i collegamenti;Io sto gestendo tutto l'input da tastiera separatamente altrove.

È possibile questo?Posso disattivare il collegamento QAction, ma hanno ancora il testo del collegamento (in questo esempio Ctrl + C nel mio menu?

MODIFICA:Il modo in cui ho finito di fare è il collegamento al menu aboutToShow() e aboutToHide() eventi e abilitare/disabilitare i collegamenti sono attivi solo quando il menu è visualizzato.Ma preferirei una soluzione di pulitura...

È stato utile?

Soluzione

Si potrebbe ereditare da QAction e ignorare QAction::eventi(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);
    }
};

Questo farà sì che ogni eventi di tipo QEvent::Collegamento inviato alle azioni per non innescare la 'attivati()' segnali.

Altri suggerimenti

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

Questo sarà simile a un action con una scorciatoia, ma il collegamento non è effettivamente installato.

Ecco un esempio completo:

#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();
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top