我正在尝试将QTabWidget
中的Qt::META
+Qt::Key_Tab
快捷方式绑定到切换选项卡(就像它在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
捕获密钥 - 都是相对的,如CCD_ 19等
QWidget::event
/QWidget::eventFilter
捕获Shift+Tab,1Alt1+Tab,但不捕获Ctrl(META)+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_*