允许用户输入组合键的最简单方法是什么?
它基本上看起来像QLineEdit
字段,但它只接受键组合。
例如,Qt Designer中已有一些内容可用于为Action分配快捷方式。我的要求完全一样。 TIA
答案 0 :(得分:2)
Qt Creator实际上是开源的。因此,如果您想要该对话框的功能,您可以查看它们是如何做到的。
“编辑操作”对话框的实现位于名为“QtTools”的库中。这是标题和源文件:
...但它看起来有点间接,并自行引导到表单引擎本身。您需要花一些时间才能到达实际捕获按键序列的部分。休闲浏览sans调试器建议在这些文件中实现QtKeySequenceEdit
:
答案 1 :(得分:1)
从Qt 5.2开始,您可以将QKeySequenceEdit用于此目的
答案 2 :(得分:0)
我找到了一些方法来实现我的要求。我想要一个QLineEdit
之类的输入字段,它将捕获符合以下格式的组合键:
最简单的方法是对QLineEdit
&进行分类。重新实施keyPressEvent( QKeyEvent * event )
功能。我的头文件和cpp文件看起来像这样。任何人都可以操纵keyPressEvent
内的逻辑以满足他们的要求。
<强> QLineEditHotKey.h 强>
#include <QLineEdit>
class QLineEditHotKey: public QLineEdit
{
public:
QLineEditHotKey( QWidget* pParent = NULL);
~QLineEditHotKey(){}
protected:
void keyPressEvent ( QKeyEvent * event );
};
<强> QLineEditHotKey.cpp 强>
QLineEditHotKey::QLineEditHotKey(QWidget* pParent):QLineEdit(pParent)
{
}
void QLineEditHotKey::keyPressEvent( QKeyEvent * event )
{
int keyInt = event->key();
Qt::Key key = static_cast<Qt::Key>(keyInt);
// Handle unknown keys
if( key == Qt::Key_unknown )
return;
// Pressing Esc or Backspace will clear the content
if( key == Qt::Key_Escape || key == Qt::Key_Backspace )
{
setText(NULL);
return;
}
// Empty means a special key like F5, Delete, Home etc
if( event->text().isEmpty() )
return;
// Checking for key combinations
Qt::KeyboardModifiers modifiers = event->modifiers();
if(modifiers.testFlag(Qt::NoModifier))
return;
if(modifiers.testFlag(Qt::ShiftModifier))
keyInt += Qt::SHIFT;
if(modifiers.testFlag(Qt::ControlModifier))
keyInt += Qt::CTRL;
if(modifiers.testFlag(Qt::AltModifier))
keyInt += Qt::ALT;
setText( QKeySequence(keyInt).toString(QKeySequence::NativeText) );
}
This 问题对于找到解决方案非常有帮助。