可能是你定义QWidget类的子控件覆盖了该类的所有位置,所以你在Widget上是获取不到鼠标事件的,应为他不具有焦点。
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);
}
}
这段代码是在QOject 的帮助文档中的,可以执行,不过要包含相关头文件。
你可以把QEvent::KeyPress改成是 QEvent::MouseMove试试看能不能满足你的需求。如:
if (obj == textEdit) {
if (event->type() == QEvent::MouseMove) {
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
qDebug() << "mouse x,y:" << mouseEvent->pos().x()<<"\t"<<mouseEvent->pos().y();
return true;
} else {
return false;
}
}
[ 此帖被guofu089在2009-12-27 13:17重新编辑 ]