Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Maverick от Июль 01, 2009, 14:49



Название: Акселераторы в Qt 4.4.3
Отправлено: Maverick от Июль 01, 2009, 14:49
Здравствуйте. Имеется код следующего вида:
Код:
QMenu *menu = new QMenu(_R("&Файл"), this);
    menuBar()->addMenu(menu);

Программа запускается, меню вызывается по нажатию сочетания клавиш Alt + Ф. А при нажатии сочетания клавиш Alt + A (латинская А) меню не открывается. В предыдущих версиях Qt эта проблема легко решалась при помощи акселераторов QAccel. В чевертой версии Qt этот класс отсутствует. Гуру, поделитесь пожалуйста информацией, как решить эту проблему? Пробовал
Код:
    QMenu *menu = new QMenu(_R("&Файл»"), this);
menu->menuAction()->setShortcut(QKeySequence("Qt::ALT+A"));
    menuBar()->addMenu(menu);

не помогает.


Название: Re: Акселераторы в Qt 4.4.3
Отправлено: Пантер от Июль 01, 2009, 16:20
QMenu *menu = new QMenu(tr("&File"), this);
И пользуемся переводом.


Название: Re: Акселераторы в Qt 4.4.3
Отправлено: Maverick от Июль 01, 2009, 16:44
Пробовал и так. Лингвисту указал, чтобы переводил &File  в &Файл. Меню открывается по нажатию Alt+Ф, а по нажатию Alt+A не открывается.


Название: Re: Акселераторы в Qt 4.4.3
Отправлено: Maverick от Июль 01, 2009, 17:37
Проблема в том, что меню открывается только в том случае, если выбрана русская раскладка. Если нажимаем на ту же самую клавишу в латинской раскладке, меню не открывается.


Название: Re: Акселераторы в Qt 4.4.3
Отправлено: Пантер от Июль 01, 2009, 17:58
Дык акселератор и не должен срабатывать в другой раскладке.


Название: Re: Акселераторы в Qt 4.4.3
Отправлено: Maverick от Июль 01, 2009, 18:18
Хорошо, тогда сформулирую вопрос по-другому. Как сделать так, чтобы меню открывалось независимо от раскладки?


Название: Re: Акселераторы в Qt 4.4.3
Отправлено: ритт от Июль 01, 2009, 19:27
Цитировать
menu->menuAction()->setShortcut(QKeySequence("Qt::ALT+A"));
это что за зверь? сам придумал?
!rtfm: QKeySequence


Название: Re: Акселераторы в Qt 4.4.3
Отправлено: Maverick от Июль 01, 2009, 22:41
Дело здесь вовсе не в QKeySequence, а в том, что метод setShortcut в данном случае не работает. Вот и хотелось бы узнать, каким образом можно заставить открываться меню независимо от раскладки клавиатуры.  Неужели никто с такой проблемой не сталкивался? А она возникала неужели трудно подсказать решение? Для того чтобы отправить мануалы читать форум не нужен. Мне почему-то казалось что на форумы и существуют для того, чтобы находить ответы на возникающие вопросы.


Название: Re: Акселераторы в Qt 4.4.3
Отправлено: BRE от Июль 01, 2009, 22:48
Мне кажется Константин говорит немного о другом...
Внимательно сравни следующие строчки (в месте QKeySequence):

Цитировать
menu->menuAction()->setShortcut(QKeySequence("Qt::ALT+A"));

Цитировать
QKeySequence(QKeySequence::Print);
 QKeySequence(tr("Ctrl+P"));
 QKeySequence(tr("Ctrl+p"));
 QKeySequence(Qt::CTRL + Qt::Key_P);


Название: Re: Акселераторы в Qt 4.4.3
Отправлено: Maverick от Июль 01, 2009, 23:05
Я перепробовал кучу вариантов использования QKeySequence, в том числе и QKeySequence(QKeySequence::Print). Согласен, то, что я привел, кривовато, но проблема моя совсем не в этом. Использование QKeySequence в данном случае не помогает открыть меню. Например, для того, чтобы по Ctrl + P напечатать документ, пишем следующее:
Код:
QAction actionPrint = new QAction(QIcon(srcPath + "/fileprint.png"), tr("&Print..."), this);
actionPrint ->setShortcut(QKeySequence::Print);
Все прекрасно работает. Документ печатается по нажатию Ctrl+P. А если написать
Код:
menu->menuAction()->setShortcut(QKeySequence::Print);
меню по Ctrl+P открыть не получится. Следовательно, либо я допустил ошибку в вышеприведенном коде, либо меню нужно открывать по-другому. Вот и возникает вопрос, где я накосячил? Если кто знает, не сочтите за труд помочь в решении возникшей проблемы.


Название: Re: Акселераторы в Qt 4.4.3
Отправлено: BRE от Июль 01, 2009, 23:10
А попробуй посмотреть на:
Qt::ShortcutContext