Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关键事件的Qt处理 我试图在C++中给我的图形程序写控制台控件。我正在使控制台小部件成为作为主窗口的小部件的子小部件。控制台是一个QDockWidget,其中包含QTextEdit我想做的是处理事件当从控制台窗口按下返回键,然后处理命令时,所有其他键事件都应该由QTextEdit处理。问题是,我无法捕捉任何关键事件,除了命令和Shift键之类的事件。。。有什么想法吗_C++_Qt - Fatal编程技术网

关键事件的Qt处理 我试图在C++中给我的图形程序写控制台控件。我正在使控制台小部件成为作为主窗口的小部件的子小部件。控制台是一个QDockWidget,其中包含QTextEdit我想做的是处理事件当从控制台窗口按下返回键,然后处理命令时,所有其他键事件都应该由QTextEdit处理。问题是,我无法捕捉任何关键事件,除了命令和Shift键之类的事件。。。有什么想法吗

关键事件的Qt处理 我试图在C++中给我的图形程序写控制台控件。我正在使控制台小部件成为作为主窗口的小部件的子小部件。控制台是一个QDockWidget,其中包含QTextEdit我想做的是处理事件当从控制台窗口按下返回键,然后处理命令时,所有其他键事件都应该由QTextEdit处理。问题是,我无法捕捉任何关键事件,除了命令和Shift键之类的事件。。。有什么想法吗,c++,qt,C++,Qt,这是控制台的代码: class ConsoleWidget : public QDockWidget { public: ConsoleWidget( const QString& sTitle, QWidget* pParent = 0, Qt::WindowFlags nFlags = 0 ); ~ConsoleWidget(); protected: void keyPressEvent( QKeyEvent* pEvent ); void key

这是控制台的代码:

class ConsoleWidget : public QDockWidget
{
public:
    ConsoleWidget( const QString& sTitle, QWidget* pParent = 0, Qt::WindowFlags nFlags = 0 );
    ~ConsoleWidget();

protected:
    void keyPressEvent( QKeyEvent* pEvent );
    void keyReleaseEvent( QKeyEvent* pEvent );

private:
    QTextEdit* m_pTextArea;
};


ConsoleWidget::ConsoleWidget( const QString& sTitle, QWidget* pParent, Qt::WindowFlags nFlags ) :
        QDockWidget( sTitle, pParent, nFlags )
{
    setFocusPolicy( Qt::StrongFocus );
    m_pTextArea = new QTextEdit( this );
    setWidget( m_pTextArea );
}

ConsoleWidget::~ConsoleWidget()
{
    // Qt is taking ownership of pTextWidget... (I think)
}

void ConsoleWidget::keyPressEvent( QKeyEvent* pEvent )
{
    if( pEvent->key() & Qt::Key_Return )
    {
        int i = 666;
    }
    else
    {
        pEvent->setAccepted( false );
        // TODO Should I do this if not handling the event?
        //QDockWidget::keyPressEvent( pEvent );
    }
}

void ConsoleWidget::keyReleaseEvent( QKeyEvent* pEvent )
{
    QDockWidget::keyReleaseEvent( pEvent );
}

您需要子类化
QTextEdit
,并覆盖那里的
keyPressEvent
方法。请记住,
QTextEdit
类将使用大多数关键事件,因此它们不会传播到父dock小部件


或者,您可以安装事件过滤器。这个例子很好。在您的情况下,您的自定义dock widget类可以是
QTextEdit
的事件过滤器,因此您的逻辑都在该类中。

是的,在这种情况下,正如Troubadour所说,installEventFilter()将是一种选择。让它“吃掉”返回键。那numpad键呢?也许也能赶上?