macos — быстрое связывание C ++ QT OSX Qt :: META + Qt :: Key_Tab

Я пытаюсь связать Qt::META + Qt::Key_Tab ярлык в QTabWidget переключать вкладки (как это работает в Chrome или многих других приложениях).
Я пробовал каждое решение, найденное в Google, но эта комбинация клавиш не работает.

Я пытался:

  • Комбинации как Qt::Key_Control + Qt::Key_Tab, Qt::Key_Meta + Qt::Key_Tab, QKeySequence(Qt::Key_Meta, Qt::Key_Tab), QKeySequence(Qt::META, Qt::Key_Tab) так далее.
  • QShortcut
  • QAction
  • захватывать ключи с помощью виртуальных QWidget::event
  • захват ключей с помощью виртуального QWidget::eventFilter с installEventFilter
  • все относительно как keyPressed и так далее..

QWidget::event/QWidget::eventFilter уловы сдвиг+табуляция, Alt+табуляция, но нет Ctrl(МЕТА) +табуляция. Когда я нажимаю Ctrl Я вижу свой qDebug вывод, когда я нажимаю Ctrl + Tab ничего не происходит.

Может кто-нибудь объяснить мне, что не так и что особенного в этой конкретной комбинации клавиш в QT на OSX?

Не имеет значения, какой виджет, я создал чистый проект GUI без других виджетов в нем — все тот же.

Некоторая информация:

  • OSX Mountain Lion 10.8.5
  • QT 5.2

КСТАТИ, В Qt Creator я не могу установить Ctrl+табуляция ярлык тоже, это действительно смешно.

Замечания: Отлично работает на Windows, это не работает на OSX!

Я ценю любую помощь.

Простой код с QAction:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);QAction *pAction = new QAction(this);
QKeySequence keySequence = Qt::META + Qt::Key_Tab; // Not working
// or
QKeySequence keySequence = Qt::ALT + Qt::Key_Tab; // Works Alt+Tab
// or
QKeySequence keySequence = QKeySequence(Qt::Key_Meta, Qt::Key_Tab); // Not working
// or
QKeySequence keySequence = QKeySequence(Qt::META, Qt::Key_Tab); // Not working
pAction->setShortcut(keySequence);

connect(pAction, SIGNAL(triggered()), this, SLOT(shortcut_NextTab()));

addAction(pAction);

}

И функция слота:

void MainWindow::shortcut_NextTab()
{
qDebug() << "LOL";
}

Ожидая увидеть LOL в выводе приложения, при нажатии Ctrl+табуляция.

6

Решение

Это похоже на ошибку в Qt на Какао. Увидеть QTBUG-8596 а также QTBUG-12232. Первый отчет об ошибке имеет комментарий это говорит о том, что это работает, если вы добавите QAction в меню. Я столкнулся с той же проблемой, что и вы, и это решение помогло мне.

3

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

В этой строке:

QKeySequence keySequence = Qt::Key_Meta + Qt::Key_Tab;

Вы просто добавляете целые числа. в Документация QT:

QKeySequence :: QKeySequence (int k1, int k2 = 0, int k3 = 0, int k4 = 0)
Создает последовательность клавиш максимум с 4 клавишами k1, k2, k3 и k4.
Коды ключей перечислены в Qt :: Key и могут быть объединены с модификаторами (см. Qt :: Modifier), такими как Qt :: SHIFT, Qt :: CTRL, Qt :: ALT или Qt :: META.

Имея в виду:

  • если вы хотите последовательность, вам нужно использовать конструктор с двумя аргументами для QKeySequence, а не просто добавить два целых числа вместе (что вы и делаете) и использовать конструктор с одним аргументом.
  • Если вы хотите модификатор — который я предполагаю означает удержание клавиши — используйте QT::Modifierне Qt::Key_*,
0

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