2017-03-18 77 views
6

Ben Ctrl + Shift + C gibi bir kısayol oluşturmak için çalışıyorlar.Qt'de iki anahtar değiştirici ile 3 tuşlu sıra kısayolu nasıl ayarlanır?

Aşağıdaki yolları denedim: Onlar işe yaramadı

QAction *generalControlAction = new QAction(this); 
generalControlAction->setShortcut(QKeySequence("Ctrl+Shift+c")); 
connect(generalControlAction, &QAction::triggered, this, &iBexWorkstation::onGeneralConfiguration); 

QShortcut *generalControlShortcut = new QShortcut(QKeySequence("Ctrl+Shift+C"), this); 
connect(generalControlShortcut, &QShortcut::activated, this, &iBexWorkstation::onGeneralConfiguration); 

. Ctrl + ÜstKrktr + C'a bastığımda hiçbir şey tetiklenmez.

Qt'de iki değiştiriciyle kısayol ayarlamak imkansız mı?

cevap

4

Ben minimal, komple örnek yazdı. Benim durumumda nasıl çalıştığını anlattı. Olabilir, senin yanında olmayan bir şey ekledim. ("Minimal, eksiksiz, doğrulanabilir örnekleri" tercih edilir nedeni budur.)

// standard C++ header: 
#include <iostream> 

// Qt header: 
#include <QAction> 
#include <QApplication> 
#include <QLabel> 
#include <QMainWindow> 

using namespace std; 

int main(int argc, char **argv) 
{ 
    cout << QT_VERSION_STR << endl; 
    // main application 
#undef qApp // undef macro qApp out of the way 
    QApplication qApp(argc, argv); 
    // the short cut 
    const char *shortCut = "Ctrl+Shift+Q"; 
    // setup GUI 
    QMainWindow qWin; 
    QAction qCmdCtrlShiftQ(&qWin); 
    qCmdCtrlShiftQ.setShortcut(QKeySequence(shortCut)); 
    qWin.addAction(&qCmdCtrlShiftQ); // DON'T FORGET THIS. 
    QLabel qLbl(
    QString::fromLatin1("Please, press ") 
    + QString::fromLatin1(shortCut)); 
    qLbl.setAlignment(Qt::AlignCenter); 
    qWin.setCentralWidget(&qLbl); 
    qWin.show(); 
    // add signal handlers 
    QObject::connect(&qCmdCtrlShiftQ, &QAction::triggered, 
    [&qLbl, shortCut](bool) { 
    qLbl.setText(
     QString::fromLatin1(shortCut) 
     + QString::fromLatin1(" pressed.")); 
    }); 
    // run application 
    return qApp.exec(); 
} 

Sana QWidget::addAction() aramadım şüpheleniyoruz. Bunu açıklarsam programımda da artık işe yaramıyor. Windows'un 10 (64 bit) üzerinde VS2013 ve Qt 5.6 ile Derleyen

:

Snapshot of testQShortCut.exe (after pressing Ctrl+Shift+Q)

Bu anlık Ctrl + + Q tuşlarına bastıktan sonra yapılmıştır.

Not:

Ben gerçek soru "Ctrl + Shift + C" hakkında olduğunu anladılar. Emin olmak için kontrol ettim. Yukarıdaki örnek kod, "Ctrl + Shift + C" ile de çalışır.

+0

Kısayolu bir eylem olarak eklediğimizde çalışır. Normal yöntem çalışmıyor. Bunu bilmek önemlidir. –

2

generalControlAction-> setShortcut (QKeySequence (Ctrl + Shift + C));

sadece

için kodunuzda söz deyimi yukarıda değiştirmek

generalControlAction-> setShortcut ((Ctrl + Shift + C));

bu iyi çalışmalıdır. "C" daha sonra sermaye olmalı.

aşağıda verilen bağlantıdan tuş sırasını bakınız http://doc.qt.io/qt-5/qkeysequence.html

+0

Hem c hem de C için denedim. Kodumla benim için çalışmadı. Scheff'un cevabını deneyeceğim ve bunun hakkında geri bildirim vereceğim. –

+0

@PatelKalpesh Qt dokümanı okudum. sen bağlandın Burada belirtilmiştir: "Harfler için, şartname dizesinde kullanılan durumun önemli olmadığını unutmayın." – Scheff

+0

Aynı hattı koduma ekledim ve benim için iyi çalışıyor. İşte kodumdan "action-> setShortcut (tr (" Ctrl + Shift + C ")); –