2

允许用户输入组合键的最简单方法是什么?它基本上看起来像QLineEdit字段,但它只接受组合键。

例如,Qt 设计器中已经有一些东西,您可以在其中为操作分配快捷方式。我的要求完全一样。TIA

编辑操作 - 分配快捷方式

4

3 回答 3

2

Qt Creator 实际上是开源的。因此,如果您确切地想要该对话框的作用,您可以窥视并查看他们是如何做到的。

“编辑操作”对话框的实现位于名为“QtTools”的库中。这是头文件和源文件:

actioneditor_p.h

动作编辑器.cpp

...但它看起来有点间接,并且引导到表单引擎本身。您必须挖掘一段时间才能到达它实际捕获键序列的部分。休闲浏览无调试器建议它QtKeySequenceEdit在这些文件中实现:

qtpropertybrowserutils_p.h

qtpropertybrowserutils.cpp

于 2012-11-21T06:49:25.297 回答
2

从 Qt 5.2 开始,您可以为此目的使用QKeySequenceEdit

于 2014-12-19T03:42:46.973 回答
0

我找到了一些替代方法来满足我的要求。我想要一个QLineEdit类似的输入字段,它将捕获符合以下格式的组合键:

  • Alt+Ctrl+Shift+X
  • Alt+Ctrl+X
  • Alt+Shift+X
  • Ctrl+Shift+X

最简单的方法是通过子类化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) );
}

这个问题对找到解决方案非常有帮助。

于 2012-11-21T10:55:50.210 回答