如何在QWidget中实现mouseEnter和mouseLeave事件?
如果mouseEnter到QWidget然后我需要将Background颜色设置为Gray,如果mouseLeave从QWidget那么我需要设置背景颜色是白色
我试过了
void enterEvent(QEvent *);
void leaveEvent(QEvent *);
Run Code Online (Sandbox Code Playgroud)
在enter&leave事件的内部我使用bool varibale设置true&false.我正在调用QPainter事件更新();
代码如下:
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();
}
Run Code Online (Sandbox Code Playgroud)
我在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
Run Code Online (Sandbox Code Playgroud)
请帮我解决这个问题.如果任何人有示例代码请提供给我....
使用样式.
大多数小部件都支持:hover
伪状态,在样式中为小部件设置backgroundcolor属性
test->setStyleSheet(":hover {background-color: #dddddd;}");
Run Code Online (Sandbox Code Playgroud)
或者通过设计师来做,这更方便,如果你需要做自定义绘图.但是你不需要为任何只改变基本小部件外观的东西做这件事.
QWidgets 还支持underMouse
可以用来代替 StyleOption 或 Attribute 解决方案的方法:
if(underMouse()){
painter.fillRect(QRect(0,0,width(),height()),Qt::white);}
else{
painter.fillRect(QRect(0,0,width(),height()),Qt::gray);}
Run Code Online (Sandbox Code Playgroud)
首先,我将使用成员来保存当前背景颜色而不是布尔值。这将简化paintEvent代码:
painter.fillRect(QRect(...), m_backColor);
Run Code Online (Sandbox Code Playgroud)
我猜第一个 QPainter 会出现错误。为什么使用 QPainter 来填充图像?如果 var 是 QImage,您可以通过示例使用fill 函数并像您一样调用drawImage。QPixmap具有相同类型的功能。
归档时间: |
|
查看次数: |
13298 次 |
最近记录: |