Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] Создаю контекстное меню. Не пашут Shortcut'ы 
:(
    Опции темы
EKoshelev
Дата 26.5.2015, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 509
Регистрация: 1.9.2004

Репутация: нет
Всего: нет



В ассистанте для добавления опции в контекстное меню кроме прочего есть такой метод:

Код

QAction * QMenu::addAction ( const QString & text, const QObject * receiver, const char * member, const QKeySequence & shortcut = 0 )


Пишу такой код:

Код

    QKeySequence* pCtrlN = new QKeySequence("Ctrl+N");

    // Меню, выпадающее на ListWidget'ах
    m_pMenu = new QMenu();
    QAction* pInsAction = m_pMenu->addAction(toUnicode("&Вставить"), this, SLOT(insertAction())/*, QKeySequence("Ins")*/);
    m_pMenu->addAction(toUnicode("&Добавить"), this, SLOT(addAction()), Qt::CTRL + Qt::Key_N);
    m_pMenu->addAction(toUnicode("&Удалить"), this, SLOT(deleteAction()));
    m_pMenu->addSeparator();
    m_pMenu->addAction(toUnicode("&Копировать"), this, SLOT(copyAction()), QKeySequence("Ctrl+C"));
    m_pMenu->addAction(toUnicode("&Вставить"), this, SLOT(pasteAction()), *(new QKeySequence("Ctrl+V")));

    pInsAction->setShortcut(Qt::Key_Insert);


Т. е. пытаюсь задать горячую клавишу четырьмя способами. Менюха показывается и правильно работает, а горячие клавиши - нет.

Подскажите что я делаю не правильно.

Это сообщение отредактировал(а) EKoshelev - 26.5.2015, 10:04


--------------------
Вежливым и адекватным предлагаю общаться на "ты".
PM MAIL   Вверх
Guinness
Дата 26.5.2015, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 21.6.2009
Где: Зеленоград

Репутация: 2
Всего: 10



Возможно, идея идиотская, но я бы попробовал. Попробуйте убрать знак амперсанда перед названиями QAction. Если не прокатит, то нужно пробовать нажимать shorcut'ы при различных фокусах элементов. К примеру нажать по главному окну, понажимать shorcut'ы, нажать на элемент ListView, повторить процедуру.

Добавлено через 4 минуты и 37 секунд
И ещё выведите в консоль или куда-нибудь список shortcut'ов, чтобы точно убедиться, что они присвоились QAction'ам.
PM MAIL   Вверх
EKoshelev
Дата 26.5.2015, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 509
Регистрация: 1.9.2004

Репутация: нет
Всего: нет



Guinness, амперсанды убрал, фокусы менял, шоткаты присваиваются. Но нифига не пашет. 

Увы, блин...


--------------------
Вежливым и адекватным предлагаю общаться на "ты".
PM MAIL   Вверх
Guinness
Дата 26.5.2015, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 21.6.2009
Где: Зеленоград

Репутация: 2
Всего: 10



EKoshelev, порылся у себя в коде. Работают вот такие назначения:
Код

    m_ui->actionOpen->setShortcut(QKeySequence( QKeySequence::Open ) );
    m_ui->actionSave->setShortcut(QKeySequence( QKeySequence::Save ) );
    m_ui->actionAbout->setShortcut(QKeySequence( QKeySequence::HelpContents ) );

Остальное назначал через QtDesigner. Он делает так:
Код

        actionExit->setText(QApplication::translate("TaskSchedule", "\320\222\321\213\321\205\320\276\320\264", 0));
        actionExit->setShortcut(QApplication::translate("TaskSchedule", "Ctrl+Q", 0));

К несчастью, сейчас пробовать Ваш код времени нет, но я надеюсь что-то из приведенного мной натолкнёт Вас на решение проблемы.

PM MAIL   Вверх
Guinness
Дата 27.5.2015, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 21.6.2009
Где: Зеленоград

Репутация: 2
Всего: 10



Я что подумал, а Вы где тестируете своё приложение? Пробовали отлаживать на чистой ОС на виртуалке?
PM MAIL   Вверх
EKoshelev
Дата 27.5.2015, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 509
Регистрация: 1.9.2004

Репутация: нет
Всего: нет



Цитата

Я что подумал, а Вы где тестируете своё приложение? Пробовали отлаживать на чистой ОС на виртуалке? 

Тестирую в седьмой винде. Что такое виртуалка, признаться, не в курсе.


Короче, у меня ничего не получилось. Сделал по тупому, вот так:

Код

    m_pMenu = new QMenu();
    m_pMenu->addAction(toUnicode("&Добавить строку"), this, SLOT(addAction()), Qt::CTRL + Qt::Key_N);
    m_pMenu->addAction(toUnicode("&Удалить строку"), this, SLOT(deleteAction()));
    m_pMenu->addAction(toUnicode("&Вставить строку"), this, SLOT(insertAction()), Qt::Key_Insert);
    m_pMenu->addSeparator();
    m_pMenu->addAction(toUnicode("&Копировать"), this, SLOT(copyAction()), Qt::CTRL + Qt::Key_C);
    m_pMenu->addAction(toUnicode("&Вставить"), this, SLOT(pasteAction()), Qt::CTRL + Qt::Key_V);
    // Горячие клавиши
    QShortcut* pAddSortcut = new QShortcut(Qt::CTRL + Qt::Key_N, this, SLOT(addAction()));
    QShortcut* pInsSortcut = new QShortcut(Qt::Key_Insert, this, SLOT(insertAction()));
    QShortcut* pCopySortcut = new QShortcut(Qt::CTRL + Qt::Key_C, this, SLOT(copyAction()));
    QShortcut* pPasteSortcut = new QShortcut(Qt::CTRL + Qt::Key_V, this, SLOT(pasteAction()));




--------------------
Вежливым и адекватным предлагаю общаться на "ты".
PM MAIL   Вверх
Guinness
Дата 27.5.2015, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 21.6.2009
Где: Зеленоград

Репутация: 2
Всего: 10



Цитата(EKoshelev @  27.5.2015,  11:33 Найти цитируемый пост)
Что такое виртуалка, признаться, не в курсе.

VMWareVirtualBox, например. Я подумал, что возможно проблемы в настройках ОС.

Хотелось бы ещё раз уточнить, вот так, оно не взлетает?
Код

m_pMenu->addAction("title", this, SLOT(addAction()), Qt::CTRL + Qt::Key_N);

Я почему спрашиваю, раньше вроде было так, если пишешь "&Copy", то автоматически горячей клавишей для этого пункта меню Ctrl+C.
Ещё можно попробовать сделать через такой addAction. При этом попробовать создать QAction и вручную ему добавить горячую клавишу и попробовать поиграться с его контекстом.
Но, вообще, у меня варианты как-то закончились, потому что это всегда работало.
PM MAIL   Вверх
Amp
Дата 27.5.2015, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 7
Всего: 17



Версия Qt какая? У них был ряд багов связанных с работой хоткеев и акселераторов в non-latin раскладке.
PM MAIL   Вверх
EKoshelev
Дата 28.5.2015, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 509
Регистрация: 1.9.2004

Репутация: нет
Всего: нет



Guinness
Код

VMWare, VirtualBox, например.

Нет, чисто под виндой тестил.

Код

Хотелось бы ещё раз уточнить, вот так, оно не взлетает?

Не взлетает

&Copy - не становится

Код

Я почему спрашиваю, раньше вроде было так, если пишешь "&Copy", то автоматически горячей клавишей для этого пункта меню Ctrl+C.
Ещё можно попробовать сделать через такой addAction. При этом попробовать создать QAction и вручную ему добавить горячую клавишу и попробовать поиграться с его контекстом.

С контекстом не игрался, но остальное не пашет.


Amp, 4.8.5. Не совсем понял что имел в виду про раскладку, но если правильно понял, то и при RU, и при EN раскладках не работает.

Ребят, спасибо конечно, но я думаю, что мне и в таком виде нормально будет.


--------------------
Вежливым и адекватным предлагаю общаться на "ты".
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0772 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.