qt - 如何在QWidget中实现mouseEnter和mouseLeave事件?

标签 qt

如何在QWidget中实现mouseEnter和mouseLeave事件?

如果mouseEnter到QWidget,那么我需要将背景色设置为灰色,
如果将鼠标从QWidget离开,则需要将背景色设置为白色

我试过了

void enterEvent(QEvent *);
void leaveEvent(QEvent *);

在enter&leave事件的内部,我使用的是bool varibale,设置为true和false。我正在调用QPainter事件update();

下面的代码:
void Test::enterEvent(QEvent *)
{
   _mouseMove=true;
    update();

}

void Test::leaveEvent(QEvent *)
{
   _mouseMove=false;
    update();

}

void Test::paintEvent(QPaintEvent *)
{
    QPainter painter;
    painter.begin(&m_targetImage);
    painter.setRenderHint(QPainter::Antialiasing);

        if(_mouseMove){
            painter.fillRect(QRect(0,0,width(),height()),Qt::white);}
        else{
            painter.fillRect(QRect(0,0,width(),height()),Qt::gray);}

    painter.end();

    QPainter p;
    p.begin(this);
    p.drawImage(0, 0, m_targetImage);
    p.end();
}

当我在QWidget中移动鼠标时出现以下错误
QPainter::begin: Paint device returned engine == 0, type: 3
QPainter::setRenderHint: Painter must be active to set rendering hints
QPainter::end: Painter not active, aborted

请帮助我解决此问题。如果有人有示例代码,请提供给我...。

最佳答案

首先,我将使用一个成员来保存当前的背景色,而不是 bool 值。这将简化paintEvent代码:

painter.fillRect(QRect(...), m_backColor);

我猜错误出现在第一个QPainter上。为什么要使用QPainter填充图像?如果var是QImage,则可以使用fill function作为示例,并像平时一样调用drawImage。您对QPixmap具有相同的功能。

关于qt - 如何在QWidget中实现mouseEnter和mouseLeave事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4333116/

相关文章:

windows - make 不被识别为内部或外部命令 - Qt SDK - Windows

c++ - QEventLoop 处理所有事件

c++ - 为什么调用了数据库关闭函数后,Qt中的SQLite数据库还是删除不了?

c++ - :-1: error: LNK1104: cannot open file 'MyProject.obj'

qt - 为什么 QT 设计器重新调整大小或不允许我缩小或展开小部件或按钮?

c++ - qmenu 不适用于 MAC (Qt Creator)

c++ - Qt - 在工作线程崩溃时将 cv::Mat 转换为 QImage

c++ - 在 VC++ 和 Qt 应用程序之间使用共享内存进行通信

qt - 在 Qt 中绘制只有 2 个圆角的矩形

c++ - 如何在 Qmap 中查找特定值