Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: agm от Мая 18, 2010, 14:04



Название: Вопрос по меню
Отправлено: agm от Мая 18, 2010, 14:04
Есть менюшка, примерно такая
   menuBar = new QMenuBar(this);
   menuBar->setObjectName("menuBar");
   p1 = new QMenu(QString::fromLocal8Bit("Настройки"));
   menuBar->addMenu(p1); и т.д.
нужно чтобы по нажатию клавиши в виджете клавиши (скажем F10) это меню активировалось и открывалось подменю, короче что б можно было работать с меню с клавиатуры а не только мышкой.
Решение может быть таким: в обработчике нажатий клавиши вызываем  p1->exec();
но если использовать метод QAction * exec () то подменю появляется в верхнем левом углу экрана,
если брать метод QAction * exec ( const QPoint & p, QAction * action = 0 ), то непонятно как определить нужный QPoint.
Может быть есть другие подходы?


Название: Re: Вопрос по меню
Отправлено: crossly от Мая 18, 2010, 14:18
QShortcut


Название: Re: Вопрос по меню
Отправлено: MoPDoBoPoT от Мая 18, 2010, 15:00
нужно чтобы по нажатию клавиши в виджете клавиши (скажем F10) это меню активировалось и открывалось подменю, короче что б можно было работать с меню с клавиатуры а не только мышкой.
Вообще, для таких целей используют "символы быстрого доступа" (в надписи контрола перед этим самым символом ставится знак амперанда):
   p1 = new QMenu(QString::fromLocal8Bit("&Настройки"));
Ну а вообще, если хочется сделать через F10 и т.п., то можно попробовать воспользоваться тем, что метод QMenuBar::addMenu() возвращает указатель на QAction (повесить на него Shortcut):
Код
C++ (Qt)
  menuBar = new QMenuBar(this);
  menuBar->setObjectName("menuBar");
  p1 = new QMenu("Settings");
  QAction *actMenu = menuBar->addMenu(p1);
  actMenu->setShortcut(...);
 


Название: Re: Вопрос по меню
Отправлено: agm от Мая 18, 2010, 15:35
За подсказку относительно указателя на QAction, который возвращает метод addMenu спасибо, обязательно учту.
Но проблемма не в этом.
кто-нибудь скажет всеже - как программно (не мышкой) вызвать подменю и поставить фокус не его первом пункте?
обект QShortcut просто задает комбинацию клавиш по которой что то делаем.
    pa1 = new QAction(QString::fromLocal8Bit("Коннект"), this);
    pa1->setShortcut(tr("Ctrl+K"));
    connect(pa1, SIGNAL(triggered()), this, SLOT(connectDB()));
    p1->addAction(pa1);


Название: Re: Вопрос по меню
Отправлено: lit-uriy от Мая 18, 2010, 16:11
меню - это виджет, вызывай show() и он появится


Название: Re: Вопрос по меню
Отправлено: agm от Мая 18, 2010, 16:39
примерчик или ссылочку можно?


Название: Re: Вопрос по меню
Отправлено: NicK от Мая 18, 2010, 18:31
нужно чтобы по нажатию клавиши в виджете клавиши (скажем F10) это меню активировалось и открывалось подменю, короче что б можно было работать с меню с клавиатуры а не только мышкой.
Вообще, для таких целей используют "символы быстрого доступа" (в надписи контрола перед этим самым символом ставится знак амперанда):
   p1 = new QMenu(QString::fromLocal8Bit("&Настройки"));

В русской локализации почему-то в Kubuntu 10.04 и предыдущей ни одно KDE-шное и Qt4-шное () приложение не показывает меню по Alt+подчеркнутая буква. Если приложение не локализованно, то акселераторы на английском срабатывают без проблем. Как бороться - хз. :( В винде такой проблемы нет.


Название: Re: Вопрос по меню
Отправлено: agm от Мая 19, 2010, 08:15
Считаю тема закрыта, спасибо всем за ответы


Название: Re: Вопрос по меню
Отправлено: Kverde от Июня 05, 2011, 15:03
В русской локализации почему-то в Kubuntu 10.04 и предыдущей ни одно KDE-шное и Qt4-шное () приложение не показывает меню по Alt+подчеркнутая буква. Если приложение не локализованно, то акселераторы на английском срабатывают без проблем. Как бороться - хз. :( В винде такой проблемы нет.

Как я понимаю, эта проблема так и не решена? Или уже есть решение?