2013-04-12 3 views
1

Что я хочу сделать с этим фрагментом кода, задается фокус на QMenu Элемент программно. Но ни QMenu::setActiveAction(), ни QMenu::popup() работ. Как я могу это сделать?Как настроить фокус на QMenu Элемент программно

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

ответ

0

Элементы QMenu не являются «настраиваемыми» таким же образом, как и другие виджеты. И, на самом деле, они не должны, потому что то, что вы хотите, не является обычной практикой их использования.

В качестве обходного пути на мышином мышь вы можете получить позицию курсора мыши, предварительно рассчитать смещение вашего пункта меню по умолчанию во всплывающем меню и отобразить меню в точке, где курсор мыши находится под вашим меню по умолчанию. Это решение было предложено here.

Кроме того, что будет более приятным для пользователя, чтобы выбрать пункт меню по умолчанию, вы можете создавать события с узкими клавишами после отображения вашего всплывающего окна. Это работает в Windows, но не уверен в других ОС.

+0

На самом деле одним из требований к программному обеспечению является то, что в качестве устройства ввода пользователя используется только клавиатура. В этом отношении ваше первое предложение не помогает. И ваше второе предложение не ясен для меня. Это будет полезно, если вы объясните этот момент – Crain008

+0

Попробуйте нажать правую кнопку мыши, чтобы открыть всплывающее меню в вашем браузере. После появления меню попытайтесь нажимать узкие клавиши вверх/вниз на клавиатуре. Вы увидите, что выбранный пункт меню прыгает, поэтому вы можете генерировать события печати грамматически, чтобы выбрать нужный элемент. –

+0

Это работает и на Mac. –

Смежные вопросы