1

このコードでやりたいことは、QMenuプログラムで Item にフォーカスを設定することです。しかし、どちらQMenu::setActiveAction()QMenu::popup()機能しません。どうやってやるの?

#include <QApplication>
#include <QMainWindow>
#include <QMenuBar>

int main(int argc, char **argv)
{
    QApplication app(argc, argv);
    QMainWindow *window = new QMainWindow();

    window->setWindowTitle(QString::fromUtf8("Test:QMenu"));
    window->resize(336, 227);

    QAction *newAct = new QAction("&New",window);
    QAction *openAct = new QAction("&Open",window);
    QAction *saveAct = new QAction("&Save",window);

    QMenu *fileMenu;

    fileMenu = window->menuBar()->addMenu("&File");
    fileMenu->addAction(newAct);
    fileMenu->addAction(openAct);
    fileMenu->addAction(saveAct);

    window->show();

    fileMenu->popup(QPoint(10,10));

    return app.exec();
}
4

1 に答える 1

0

QMenu アイテムは、他のウィジェットと同じように「フォーカス可能」ではありません。そして、実際には、そうすべきではありません。なぜなら、あなたが望むのは、それらの使用法の一般的な慣行ではないからです。

回避策として、マウスを押すと、マウス カーソルの位置を取得し、ポップアップ メニューのデフォルト メニュー項目のオフセットを事前に計算し、マウス カーソルがデフォルト メニュー項目の下にあるポイントでメニューを表示できます。この解決策はここで提案されました。

また、ユーザーにとってさらに便利なのは、デフォルトのメニュー項目を選択して、ポップアップを表示した後に狭いキー ボタンのイベントを生成できることです。これは Windows で動作しますが、他の OS については不明です。

于 2013-04-12T09:55:08.647 に答える