2012-02-16 20 views
7

Mam Qaction w pozycji menu do usuwania wybranych elementów w jednym z moich widoków. Oto, jak utworzyć akcję:Skrót QAction nie zawsze działa

deleteAct = new QAction(tr("Delete Selected"), this); 
deleteAct->setShortcut(QKeySequence::Delete); 
connect(deleteAct, SIGNAL(triggered()), this, SLOT(deleteSelected())); 

Konfiguruję skrót klawiaturowy (klawisz Delete), który powinien wywołać akcję delectAct. Działa przez większość czasu, ale w niektórych momentach przestaje działać ... Czy ktoś wie, dlaczego skrót przestanie działać?

Uwaga: czynność będzie nadal działać, jeśli uruchomię ją z elementu menu. Jej tylko skrót, który nie ...

Odpowiedz

18

Trzeba dodać akcję do widgetu, ponieważ jest to widget, który będzie słuchanie kluczowych wydarzeń. Zakładając, „to” jest mainwindow, po prostu zrobić

addAction(deleteAct); 

pamiętać, że można dodać taką samą akcję do wielu widgetów (to cały sens oddzielonej Action Concept). Możesz dodać go do menu głównego pod nazwą i.

+0

+1 Moje skróty menu kontekstowego nie działały tak, jak chciałem, dopóki nie dodałem do akcji głównego okna. – rendon

+0

Dodatkowo, action-> setShortcutContext (...); należy ustawić, patrz odpowiedź użytkownika362638. – Tob

+0

Niekoniecznie; domyślny kontekst skrótu to Qt :: WindowShortcut, który jest tym, czego chcesz w przykładzie oryginalnego plakatu. Nie chcesz, aby klawisz Delete usuwał wybraną pozycję w oknie A po naciśnięciu Delete w oknie B, z pewnością. Qt :: ApplicationShortcut ma sens w przypadku skrótów obejmujących całą aplikację (tzn. Skrótów, które powinny działać z dowolnego okna aplikacji). –

6

Spróbuj zmienić shortcut context działań, na przykład:

deleteAct->setShortcutContext(Qt::ApplicationShortcut); 
0

Nie widząc kompletnego kodu, zaryzykowałbym przypuszczenie, że gdzieś się włącza/wyłącza. Upewnij się, że skrót jest trafiony w konstruktorze, a nie "wyłączony" gdzie indziej z powodu ustawienia.

Powiązane problemy