1
我想在C++中爲我的圖形程序編寫一個控制檯小部件。我將控制檯窗口小部件作爲一個子窗口小部件作爲主窗口。控制檯是一個包含QTextEdit的QDockWidget。 我想要做的是處理事件,當從ConsoleWidget按下Return鍵並處理該命令時,所有其他鍵事件都應該由QTextEdit處理。問題是我無法捕捉除Command和Shift鍵之外的任何關鍵事件...任何想法?Qt處理keyevents
這是控制檯的代碼:
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);
}
是的,對於這種情況,正如Troubadour所言,installEventFilter()將會是一條路。讓它「吃」回車鍵。那麼數字鍵盤Key_Enter呢?也許趕上那個? – Robin 2011-03-11 13:56:26