gpt4 book ai didi

c++ - Qt:enterEvent 和 leaveEvent 不起作用

转载 作者:太空狗 更新时间:2023-10-29 20:27:35 32 4
gpt4 key购买 nike

我在 Qt 中遇到鼠标事件的奇怪问题。我有以下代码:

#ifndef QSTONEFIELD_HPP_
#define QSTONEFIELD_HPP_

#include <QtGui>
#include <QWidget>

class QStoneField : public QWidget
{
Q_OBJECT

private:
// some stuff

public:
// some methods

protected:
void paintEvent(QPaintEvent *event);
virtual void mousePressEvent(QMouseEvent * event);
virtual void enterEvent(QMouseEvent * event);
virtual void leaveEvent(QMouseEvent * event);

signals:

public slots:

};

#endif

在第二个文件中我有:

#include "qstonefield.hpp"
// FIXME temporary include
#include <iostream>
using namespace std;

// some other methods ..

void QStoneField::mousePressEvent(QMouseEvent * event)
{
cout << "CLICK!" << endl << flush;
}

void QStoneField::enterEvent(QMouseEvent * event)
{
cout << "ENTER!" << endl << flush;
}

void QStoneField::leaveEvent(QMouseEvent * event)
{
cout << "LEAVE!" << endl << flush;
}

现在,当我编译并运行它时,我可以调用 mousePressEvent,因为程序打印“CLICK!”,但是当我用鼠标穿过小部件时,它什么也不打印。当然在 main.cpp 中我没有忘记 stone.setMouseTracking(true)。

为什么 enterEvent 和 leaveEvent 不起作用?它应该根据文档工作。提前致谢!

最佳答案

你的函数的签名应该是:

virtual void QStoneField::enterEvent(QEvent * event);
virtual void QStoneField::leaveEvent(QEvent * event);

您只是为函数使用了错误的参数,这意味着来自 Qwidget 的参数不会被覆盖。

我建议您考虑默认实现的作用,例如:

virtual void QStoneField::leaveEvent(QEvent * event){
//do my own things
QWidget::leaveEvent(event);
}

关于c++ - Qt:enterEvent 和 leaveEvent 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16064988/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com