我有一个简单的Qt应用程序,我只想回复 F12 键,无论哪个小部件都有焦点。
是否有一些简单的信号或我可以加入的东西?
我想使用 F12 键来打开/关闭主窗口全屏。
答案 0 :(得分:27)
我没试过,但这就是我要做的事情:
创建QShortcut并确保其context(setContext()
}为Qt::ApplicationShortcut
。
shortcut = new QShortcut(QKeySequence(Qt::Key_F12), parent);
shortcut->setContext(Qt::ApplicationShortcut);
然后您只需要将一个插槽连接到QShortcut::activated()信号。
答案 1 :(得分:2)
如果您有一个"中央小部件"所有其他小部件都是子代的,那么你可以简单地将其设置为QShortcut的小部件参数。
(Python,qt5)
self.centralwidget = QtWidgets.QWidget(MainWindow)
QtWidgets.QShortcut(QtGui.QKeySequence("F12"), self.centralwidget, self.goFullScreen)
我添加了这个作为答案,因为快捷方式上下文标记:Qt.ApplicationShortcut
对我不起作用。
答案 2 :(得分:0)
将快捷方式上下文设置为Qt::ApplicationShortcut
有一个严重缺陷。在模式对话框中将不起作用。因此,如果您需要真正的泛应用程序范围的快捷方式,则需要重写应用程序的notify()
方法。另一种方法是为应用程序对象安装事件过滤器,但是我怀疑它会比较慢,并且需要更多的代码。使用notify()
非常简单:
class MyApplication : public QApplication
{
// TODO: constructor etc.
protected:
bool MyApplication::notify(QObject *receiver, QEvent *event) override
{
if (event->type() == QEvent::KeyPress)
{
auto keyEvent = static_cast<QKeyEvent*>(event);
if (keyEvent->key() == Qt::Key_F12 && keyEvent->modifiers() == Qt::NoModifiers)
{
// TODO: do what you need to do
return true;
}
}
return QApplication::notify(receiver, event);
}
}