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