Как настроить фокус на QMenu Item программно

Что я хочу сделать с этим фрагментом кода, так это установить QMenu Товар программно. Но ни 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();
}

1

Решение

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

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]