QT里关于eventFilter例子为何不能执行,请指教

jianmuyan 2012-03-22 11:29:06
用的qt4.8,qt creater2.4.1
源码如下:
#include <QMainWindow>

class MainWindow : public QMainWindow
{
public:
MainWindow();

protected:
bool eventFilter(QObject *obj, QEvent *ev);

private:
QTextEdit *textEdit;
};

MainWindow::MainWindow()
{
textEdit = new QTextEdit;
setCentralWidget(textEdit);

textEdit->installEventFilter(this);
}

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == textEdit) {
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
qDebug() << "Ate key press" << keyEvent->key();
return true;
} else {
return false;
}
} else {
// pass the event on to the parent class
return QMainWindow::eventFilter(obj, event);
}
}
...全文
1011 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jianmuyan 2012-03-22
  • 打赏
  • 举报
回复
汗。犯了低级错误了。

谢谢楼上两位。结贴
xiachm 2012-03-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jdwx1 的回复:]

#include <QKeyEvent>
[/Quote]
+1

另外看楼主的代码里还有qDebug(),还得#include <QDebug>
jdwx 2012-03-22
  • 打赏
  • 举报
回复
#include <QKeyEvent>
jianmuyan 2012-03-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiachm 的回复:]

什么叫不能执行?是编译不过?还是运行出错?还是执行结果不对?
[/Quote]我例子里的源码如下:
在自己的MainWindow里重载了
protected:
bool eventFilter(QObject *obj, QEvent *event);

在cpp里添加
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == msgLabel)
{
if(event->type() ==QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
qDebug() << keyEvent->key(); //<< keyEvent->key();
return true;
}
else
{
return false;
}
}
else
{
// pass the event on to the parent class
return QMainWindow::eventFilter(obj, event);
}
}
执行报错。
..\MyApp\mainwindow.cpp:157: error: invalid static_cast from type 'QEvent*' to type 'QKeyEvent*'
..\MyApp\mainwindow.cpp:158: error: invalid use of incomplete type 'struct QKeyEvent'
..\..\4.8.0\include/QtGui/../../src/gui/kernel/qwidget.h:83: error: forward declaration of 'struct QKeyEvent'
xiachm 2012-03-22
  • 打赏
  • 举报
回复
什么叫不能执行?是编译不过?还是运行出错?还是执行结果不对?

16,817

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧