gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 13:06:34 26 4
gpt4 key购买 nike

如何在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/

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