C++ QT OSX Qt :: META + Qt :: Key_Tab快捷键绑定

x61*_*610 6 c++ macos qt keyboard-shortcuts

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

我试过了:

  • 组合如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捕获Shift+ Tab,Alt+ Tab,但不捕获Ctrl(META)+ Tab.当我按下Ctrl我看到我的qDebug输出时,当我按下Ctrl + Tab时没有任何反应.

在OSX的QT中,有人可以解释一下我的错误和特殊的关键组合吗?

无论什么小部件,我创建了干净的GUI项目,其中没有其他小部件 - 仍然是相同的.

一些信息:

  • OSX Mountain Lion 10.8.5
  • QT 5.2

顺便说一句,在Qt Creator中,我也无法设置Ctrl+ Tab快捷方式,这真的很荒谬.

注意:它在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);

}
Run Code Online (Sandbox Code Playgroud)

和插槽功能:

void MainWindow::shortcut_NextTab()
{
    qDebug() << "LOL";
}
Run Code Online (Sandbox Code Playgroud)

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

dje*_*lin -1

在这一行中:

QKeySequence keySequence = Qt::Key_Meta + Qt::Key_Tab;
Run Code Online (Sandbox Code Playgroud)

您只是将整数相加。根据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_*