In Qt, come mostrano le scorciatoie da tastiera nel menu, ma disattivarli?
-
19-09-2019 - |
Domanda
Io sono l'aggiunta di un gruppo di QAction
s 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 QAction
s 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...
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();
}