作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
出于样式目的,如果指针进入这些小部件中的任何一个,我试图使一组小部件中的所有小部件采用特定背景;即,如果指针位于小部件 A 的包含矩形内,则 A 和小部件 B 都应更改其背景。同样,如果指针进入B,那么A也应该采用相同的背景。如果指针同时位于 A 和 B 之外,背景自然会退回到非悬停背景。
QWidget 似乎拥有完成此操作的大部分管道,但它隐藏在 protected
之后。
如果可以避免的话,我真的很想避免从 QWidget 继承,而且我真的很想不必也更改小部件的样式表。
[1] 在我的例子中,我有三个小部件,而不是两个。
最佳答案
有一个event filter类,并让它在指针 vector 中保存受影响的小部件:
#include <QMouseEvent>
class EventFilter : public QObject
{
Q_OBJECT
QVector<QWidget*> widgets;
public:
void append(QWidget * w)
{
w->setAttribute(Qt::WA_Hover);
w->installEventFilter(this);
widgets.append(w);
}
bool eventFilter(QObject *watched, QEvent *event)
{
if(event->type() == QMouseEvent::HoverEnter)
{
for(auto w : widgets)
{
w->setStyleSheet("background-color: red;");
}
}
else if(event->type() == QMouseEvent::HoverLeave)
{
for(auto w : widgets)
{
w->setStyleSheet("background-color: white;");
}
}
return false;
}
};
append
方法将设置小部件并将其推送到 vector 中。
在你的表单类中有一个私有(private)过滤器实例:
class Form : public QWidget
{
Q_OBJECT
//...
private:
EventFilter filter;
//...
在您的表单构造函数中:
ui->setupUi(this);
filter.append(ui->widget1);
filter.append(ui->widget2);
filter.append(ui->widget3);
在示例中,我使用 setStyleSheet
设置背景颜色,但您可以使用您喜欢的任何策略,即重置小部件调色板。
关于c++ - 有没有一种简单的方法可以在 QWidget 的子项上触发 hoverenter/hoverleave 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49066464/
出于样式目的,如果指针进入这些小部件中的任何一个,我试图使一组小部件中的所有小部件采用特定背景;即,如果指针位于小部件 A 的包含矩形内,则 A 和小部件 B 都应更改其背景。同样,如果指针进入B,那
我是一名优秀的程序员,十分优秀!