Mam aplikację Qt na Linux.Jak programować niestandardowe skróty klawiaturowe
Chciałbym programować skróty klawiaturowe niestandardowe takie jak CTRL - Q które następnie wywołać podprogram, który wychodzi z programu.
Jak mogę to zrobić?
Mam aplikację Qt na Linux.Jak programować niestandardowe skróty klawiaturowe
Chciałbym programować skróty klawiaturowe niestandardowe takie jak CTRL - Q które następnie wywołać podprogram, który wychodzi z programu.
Jak mogę to zrobić?
Spróbuj tego:
new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this, SLOT(close()));
Można go utworzyć w contructor swojej postaci. Pozwala to uniknąć zanieczyszczania twojej klasy wskaźnikiem dostępu do skrótu. Nadal możesz chcieć dodać wskaźnik do skrótu, jeśli chcesz uzyskać do niego dostęp później. Skrót zostanie usunięty po wyjściu aplikacji, ponieważ jest nadrzędny wobec niej. Automatycznie wykonuje połączenie, nie musisz tego robić ręcznie.
Należy również zauważyć, że nie ma domyślnej sekwencji Ctrl + Q w systemie Windows, ale jest ona dostępna w systemach Linux i MacOS.
Ponieważ CTRL-Q może mieć pozycję menu lub wpis na pasku narzędzi, myślę, że szukasz QAction.
Zobacz to: http://doc.qt.digia.com/4.6/qaction.html#shortcut-prop
LE:
Przykład QAction
pracy:
QAction *foo = new QAction(this);
foo->setShortcut(Qt::Key_Q | Qt::CTRL);
connect(foo, SIGNAL(triggered()), this, SLOT(close()));
this->addAction(foo);
Wystarczy utworzyć nowy projekt Qt GUI (użyłem Qt Creator) i dodać ten kod do główny konstruktor okna i powinien działać zgodnie z oczekiwaniami.
Należy pamiętać, że nie ma potrzeby zwalniania pamięci, ponieważ struktura Qt zajmie się tym, gdy aplikacja zostanie zamknięta.
To jest próbka do utworzenia menu pliku i wyjścia akcji i połączenia między sygnałem a gniazdem.
QMenu *fileMenu = new QMenu(trUtf8("&File"));
QAction *actionExit = new QAction(tr("E&xit"));
//set "ctrl+q shortcut for exit action
actionExit->setShortcut(tr("CTRL+Q"));
//connect triggered signal of actionExit to close slot
connect(actionExit, SIGNAL(triggered()), this, SLOT(close()));
//add actionExit into file menu
fileMenu->addAction(actionExit);
Dla współczesnego Qt (5.9 jak na razie):
void MainWindow::bootStrap()
{
// create shortcut
QShortcut *shortcut = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this);
// connect its 'activated' signal to your function 'foo'
QObject::connect(shortcut, &QShortcut::activated,
this, &MainWindow::foo);
}
// somewhere in the code, define the function 'foo'
void MainWindow::foo()
{
qDebug() << "Ctrl+Q pressed.";
}
Nie zapomnij #include <QShortcut>
.
Dalsze informacje: http://doc.qt.io/qt-5/qshortcut.html
Czy jest przykładem tego, jak to zrobić? Nadal jestem noobem z QT i mam problem z ustaleniem go na tej stronie. Mówią głównie o dodaniu akcji do menu lub paska narzędzi. Ale nie mam menu ani pasków narzędzi. Chcę, aby skrót działał w głównym oknie (jedynym oknie) w mojej aplikacji. –
@JB_User Jasne, zredagowałem swoją odpowiedź. – Paul