2012-02-16 37 views
7

Tôi có một Qaction trên một mục menu để xóa các mục đã chọn trong một trong các giao diện của tôi. Đây là cách tôi tạo hành động:Phím tắt QAction không luôn hoạt động

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

Tôi thiết lập phím tắt (phím xóa) sẽ kích hoạt hành động delectAct. Nó hoạt động hầu hết thời gian nhưng tại một số điểm nó ngừng hoạt động ... Có ai biết tại sao các phím tắt sẽ ngừng làm việc?

Lưu ý: tác vụ vẫn hoạt động nếu tôi kích hoạt nó từ mục menu. nó chỉ là các phím tắt mà không làm ...

Trả lời

18

Bạn cần phải thêm các hành động để một widget, vì nó widget đó sẽ là lắng nghe các sự kiện quan trọng. Giả sử "này" là một MainWindow, chỉ cần làm

addAction(deleteAct); 

Lưu ý rằng bạn có thể thêm các hành động tương tự với nhiều widget (đó là toàn bộ điểm của khái niệm hoạt động tách ra). Vì vậy, bạn có thể thêm nó vào mainwindow vào menu.

+0

+1 Phím tắt menu ngữ cảnh của tôi không hoạt động như tôi muốn cho đến khi tôi cũng đã thêm vào các hành động chính của cửa sổ. – rendon

+0

Ngoài ra, action-> setShortcutContext (...); phải được đặt, xem câu trả lời của người dùng362638. – Tob

+0

Không nhất thiết; ngữ cảnh phím tắt mặc định là Qt :: WindowShortcut, đó là những gì bạn muốn trong ví dụ của áp phích gốc. Bạn không muốn phím Delete để xóa mục đã chọn trong cửa sổ A khi nhấn Delete trong cửa sổ B, chắc chắn. Qt :: ApplicationShortcut có ý nghĩa cho các lối tắt toàn ứng dụng (tức là các phím tắt sẽ hoạt động từ bất kỳ cửa sổ nào của ứng dụng). –

6

Hãy thử thay đổi shortcut context của hành động, ví dụ:

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

Nếu không nhìn thấy mã hoàn chỉnh, tôi rất nguy hiểm khi đoán rằng một nơi nào đó được bật/tắt. Hãy chắc chắn rằng các phím tắt là nhận được nhấn trong constructor và không phải 'vô hiệu hóa' ở một nơi khác vì một thiết lập có lẽ.

Các vấn đề liên quan