C++QT OSX QT::META+QT:键_Tab快捷键绑定



我正在尝试将QTabWidget中的Qt::META+Qt::Key_Tab快捷方式绑定到切换选项卡(就像它在chrome或许多其他应用程序中一样)。我已经尝试了谷歌中的每一个解决方案,但这种快捷组合不起作用。

我试过:

  • Qt::Key_Control+Qt::Key_TabQt::Key_Meta+Qt::Key_TabQKeySequence(Qt::Key_MetaQt::Key_Tab)、QKeySequence(Qt::METAQt::Key_Tab)等组合
  • QShortcut
  • QAction
  • 使用虚拟QWidget::event捕获密钥
  • 使用虚拟QWidget::eventFilterinstallEventFilter捕获密钥
  • 都是相对的,如CCD_ 19等

QWidget::event/QWidget::eventFilter捕获Shift+Tab1Alt1+Tab,但不捕获Ctrl(META)+Tab。当我按下Ctrl时,我会看到我的qDebug输出,当我按下Ctrl+Tab时,什么都不会发生。

有人能解释一下OSX上QT中的这个特殊组合键有什么问题吗?

不管是什么小部件,我已经创建了一个干净的GUI项目,其中没有其他小部件——仍然是一样的。

一些信息:

  • OSX山狮10.8.5
  • QT 5.2

BTW,在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";
}

当按下Ctrl+选项卡时,期望在应用程序输出中看到LOL

这似乎是Cocoa上Qt中的一个错误。参见QTBUG-8596和QTBUG-12232。第一个错误报告有一条评论,说如果你把QAction添加到菜单中,它就可以工作了。我遇到了和你一样的问题,这个解决方案对我有效

在行中:

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:"修饰符"),如Qt:、Qt:或Qt:。

含义:

  • 如果您想要一个序列,您需要对QKeySequence使用双参数构造函数,而不仅仅是将两个整数相加(这就是您正在做的)并使用一个参数构造函数
  • 如果你想要一个修饰语——我认为这意味着按下一个键——请使用QT::Modifier,而不是Qt::Key_*

最新更新