Я пытаюсь написать консольный виджет для моей графической программы на C ++.Я делаю консольный виджет дочерним виджетом для виджета, выступающего в качестве основного окна.Консоль - это QDockWidget, который содержит QTextEdit. То, что я хочу сделать, это обработать события, когда клавиша Return нажата из ConsoleWidget, а затем обработать команду, все остальные события клавиш должны обрабатываться QTextEdit .Проблема в том, что я не могу перехватить какие-либо ключевые события, кроме таких, как клавиши Command и Shift ... Есть идеи?
Это код для консоли:
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 );
}