2

を拡張するカスタム ウィジェットがありますQMainWindow。そこでQAction、メニューバーにいくつかの を追加し、それぞれにキーボードショートカットを追加しましたが、それらは正常に機能します。これらのアクションの一部をメニューバーから削除したいのですが、ショートカットは有効のままにしておきたいです (ユーザーはヘルプダイアログからショートカットが利用可能かどうかを知ることができます)。そこでまず、アクションを非表示にすることにしました。

それはうまくいかなかったので、ショートカットが機能する必要がある場合、アクションを非表示にすることはできないと思います. それで、メインウィンドウに追加しましたが、まだ機能していません。どうすればそれを機能させることができますか?これが私のコードです。必要なものはすべて method にありsomeMethodます。

class MyWidget: public QMainWindow {
    public:
        MyWidget();

};

MyWidget::MyWidget() {
    QAction *myAct = new QAction(tr("&Some Text"), this);
    fNextmyActPageAct->setShortcut(QKeySequence(Qt::Key_Right));
    myAct->setVisible(false); //adding this does not work
    connect(myAct, SIGNAL(triggered()), this, SLOT(someMethod()));

    ...

    QMenu *someMenu = menuBar()->addMenu(tr("&Some Menu"));
    someMenu->addAction(myAct); //this works, the option shows up in the menu 'Some Menu' and the shortcut works
    this->addAction(myAct); //does not work

}
4

2 に答える 2

5

このコードをテストしたところ、正常に動作しています:

QAction* myAct = new QAction(this);
myAct->setShortcut(Qt::Key_Right);
connect(myAct, SIGNAL(triggered()), this, SLOT(someMethod()));
this->addAction(myAct);

QActionmenuBarに追加しないでください。

于 2014-11-22T07:10:39.397 に答える
0

QShortcutキー、ターゲット ウィジェット、および関連するスロットをパラメーターとして使用して、そのコンストラクターに渡すことができます。これをのコンストラクターに入れるだけですMyWidget

QShortcut * shortcut = new QShortcut(QKeySequence(Qt::Key_Right),this,SLOT(someMethod()));
shortcut->setAutoRepeat(false);
于 2014-11-22T06:45:52.283 に答える