Russian Qt Forum
Июня 26, 2025, 15:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос по меню  (Прочитано 4624 раз)
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.
Может быть есть другие подходы?
Записан
crossly
Гость
« Ответ #1 : Мая 18, 2010, 14:18 »

QShortcut
Записан
MoPDoBoPoT
Гость
« Ответ #2 : Мая 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(...);
 
Записан
agm
Гость
« Ответ #3 : Мая 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);
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Мая 18, 2010, 16:11 »

меню - это виджет, вызывай show() и он появится
Записан

Юра.
agm
Гость
« Ответ #5 : Мая 18, 2010, 16:39 »

примерчик или ссылочку можно?
Записан
NicK
Гость
« Ответ #6 : Мая 18, 2010, 18:31 »

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

В русской локализации почему-то в Kubuntu 10.04 и предыдущей ни одно KDE-шное и Qt4-шное () приложение не показывает меню по Alt+подчеркнутая буква. Если приложение не локализованно, то акселераторы на английском срабатывают без проблем. Как бороться - хз. Грустный В винде такой проблемы нет.
Записан
agm
Гость
« Ответ #7 : Мая 19, 2010, 08:15 »

Считаю тема закрыта, спасибо всем за ответы
Записан
Kverde
Гость
« Ответ #8 : Июня 05, 2011, 15:03 »

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

Как я понимаю, эта проблема так и не решена? Или уже есть решение?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 2.645 секунд. Запросов: 22.