【发布时间】:2010-12-02 08:40:08
【问题描述】:
QWidget如何实现mouseEnter和mouseLeave事件?
如果 mouseEnter 到 QWidget 那么我需要将背景颜色设置为灰色, 如果来自 QWidget 的 mouseLeave 则我需要将背景颜色设置为白色
我试过了
void enterEvent(QEvent *);
void leaveEvent(QEvent *);
在 enter&leave 事件的内部,我使用 bool varibale set 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
请帮我解决这个问题。如果有人有示例代码,请提供给我....
【问题讨论】:
-
您还可以监听悬停事件,它们自己执行 update()。 Qt 样式表还允许根据悬停状态进行不同的设置。
标签: qt