2013-12-20 3 views
5

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

Я пробовал:

  • Комбинации как 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 улавливает сдвига + Tab, Alt + Tab, но не Ctrl (META) + Вкладка. Когда я нажимаю Ctrl Я вижу свой вывод qDebug, когда я нажимаю Ctrl + Tab, ничего не происходит.

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

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

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

  • OSX Mountain Lion 10.8.5
  • QT 5,2

BTW, В Qt Creator Я не в состоянии установить Ctrl +Tab ярлык либо, thats действительно смешно.

Примечание: Он отлично работает на 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 +Tab.

+0

Пожалуйста, отправьте код, который вы попробовали, объясните, что вы ожидали от него, и почему он не работает. – djechlin

+0

Добавлен простой фрагмент кода с использованием QAction. Я могу изменить Qt :: Key_Meta + Qt :: Key_Tab для того, что хочу, и он работает, но Ctrl + Tab не работает. – x610

ответ

0

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

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

Вы просто добавить целые числа. Per QT documentation:

QKeySequence :: QKeySequence (Int k1, k2 = INT 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

Хорошо, спасибо за ответ, но Qt :: META + Qt :: Key_Tab не работает. Я могу добавить длинный список кода, который я пробовал, но я не думаю, что все будет в порядке. – x610

+0

@ x610 Я знаю, что это не работает. Это то, что я вам только что сказал. Вы знаете, как конструкторы и инициализация с '=' работает в C++? – djechlin

+0

@ x610 в любом случае я думаю 'QKeySequence :: QKeySequence (Qt :: Key_Meta, Qt :: Key_Tab)' это то, что вы хотите. – djechlin

2

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

Смежные вопросы