2017-03-18 5 views
6

私はショートカットをとして設定しようとしています。 + Shift + Cです。Qtで2つのキー修飾子を使用して3キーシーケンスのショートカットを設定する方法は?

私は、次の方法を試してみました:

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 + Shift + Cを押すと何も表示されません。

Qtで2つの修飾語を使用してショートカットを設定することはできませんか?

答えて

4

は、私は、最小限の、完全なサンプルを書きました。それは私の場合にあなたがそれをどのように記述したかで働いた。あなたがあなたの側にいなかった何かを加えました。 (「最小限の、完全な、検証可能なサンプルが」好まれる理由です。)

// 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(); 
} 

私はあなたがQWidget::addAction()を呼び出していないと思われます。私がそれをコメントアウトすると、それは私のプログラムでもはや機能しません。

は、Windows 10(64ビット)上のVS2013とQt 5.6でコンパイル:

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

このスナップショットは、Ctrlキー+ Shiftキー+ Qを押した後に行われています。

注:

私は、実際の質問は、 "Ctrlキー+ Shiftキー+ C" についてだったことを後で気づきました。確かに、私はそれをチェックした。上記のサンプルコードは、 "Ctrl + Shift + C"でも使用できます。

+0

ショートカットをアクションとして追加すると機能します。通常の方法は機能しません。それを知ることが重要です。 –

2

generalControlAction-> setShortcut(QKeySequence(はCtrl + シフト + C))。

だけ

generalControlAction-> setShortcut((はCtrl +Shiftキー + C))

にあなたのコード内で言及文の上に変更します。

これは正常に動作するはずです。 "C"は後で大文字にする必要があります。

下記のリンクからキーシーケンスを参照してくださいhttp://doc.qt.io/qt-5/qkeysequence.html

+0

私はCとCの両方を試しました。私のコードではうまく動作しませんでした。私はScheffの答えを試し、フィードバックを与えます。 –

+0

@PatelKalpesh私はQtのドキュメントを読んだ。あなたはリンクしています。 "文字の場合、仕様文字列で使用されるケースは問題ではないことに注意してください。" – Scheff

+0

私のコードに同じ行が追加されていて、うまくいきます。ここに私のコードからの行 "アクション - > setShortcut(tr(" Ctrl + Shift + C "));" –

関連する問題