2013-07-13 48 views

Trả lời

29

Hãy thử điều này:

new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this, SLOT(close())); 

Bạn có thể tạo ra nó trong contructor của mẫu của bạn. Điều này cho phép tránh gây ô nhiễm cho lớp của bạn bằng một con trỏ để truy cập phím tắt. Bạn vẫn có thể muốn thêm con trỏ vào lối tắt nếu bạn muốn truy cập sau này. Phím tắt sẽ bị xóa khi ứng dụng thoát, vì ứng dụng này bị tạm dừng. Nó tự động kết nối, bạn không phải làm điều đó bằng tay.

Cũng lưu ý rằng không có trình tự Ctrl + Q mặc định trên Windows, nhưng có một trên Linux và MacOS.

27

Vì CTRL-Q có thể có mục menu hoặc mục nhập thanh công cụ, tôi nghĩ bạn đang tìm kiếm QAction.

Xem này: http://doc.qt.digia.com/4.6/qaction.html#shortcut-prop

LE:

Ví dụ về QAction tại nơi làm việc:

QAction *foo = new QAction(this); 
foo->setShortcut(Qt::Key_Q | Qt::CTRL); 

connect(foo, SIGNAL(triggered()), this, SLOT(close())); 
this->addAction(foo); 

Chỉ cần tạo một dự án Qt GUI mới (tôi đã sử dụng QtCreator) và thêm mã mà đến constructor của cửa sổ chính và nó sẽ hoạt động như mong đợi.

Xin lưu ý rằng không cần giải phóng bộ nhớ vì khung Qt sẽ xử lý khi ứng dụng đóng.

+0

Có ví dụ về cách thực hiện không? Tôi vẫn là một noob với QT và tôi đang gặp khó khăn trong việc tìm ra nó từ trang web đó. Họ chủ yếu nói về việc thêm hành động vào menu hoặc thanh công cụ. Nhưng tôi không có menu hoặc thanh công cụ. Tôi muốn các phím tắt để làm việc trong cửa sổ chính (cửa sổ duy nhất) trong ứng dụng của tôi. –

+0

@JB_User Chắc chắn, tôi đã chỉnh sửa câu trả lời của mình. – Paul

1

đây là mẫu để tạo trình đơn tệp và thoát khỏi hành động và kết nối giữa tín hiệu và vị trí.

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

Đối với Qt hiện đại (5.9 như của bây giờ):

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."; 
} 

Đừng quên #include <QShortcut>.

Thông tin khác: http://doc.qt.io/qt-5/qshortcut.html