2013-07-13 10 views

Odpowiedz

29

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.

27

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.

+0

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. –

+0

@JB_User Jasne, zredagowałem swoją odpowiedź. – Paul

1

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); 
0

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

Powiązane problemy