我有一个QLabel的widget类'BlockWidget'子类,在我设置它的qss qss_1的ctor中,我想要动画效果,当鼠标移动它时,它会改变它的背景颜色,所以我设置了它的qss qss_2,但它似乎不起作用......我的代码是这样的:
BlockWidget::BlockWidget(const QString &objname)
{
this->setObjectName(objname);
setAlignment(Qt::AlignCenter);
setStyleSheet(tr("BlockWidget#%1{color:white; background-color: gray; font-size:18px;"
"font-family:'Consolas';}").arg(objectName()));
}
void BlockWidget::mouseMoveEvent(QMouseEvent *ev)
{
setStyleSheet(tr("BlockWidget#%1{color:white; background-color: blue; font-size:18px;"
"font-family:'Consolas';}").arg(objectName()));
repaint();
}
我有一个主窗口,我实例化了81个BlockWidget实例。当我的鼠标移动到其中一个时,没有任何反应。但是如果我点击一下它会改变它的qss样式(它的背景变成蓝色)
答案 0 :(得分:1)
答案 1 :(得分:1)
如文档所述,只有在您点击,拖动或释放按钮时才会发送鼠标移动事件,如果未为窗口小部件启用鼠标跟踪。
您可以通过重新定义QWidget::enterEvent
课程中的QWidget::leaveEvent
和BlockWidget
来检测鼠标是否进入和离开标签。
或者您可以简单地使用:hover
QSS伪状态而无需重新定义任何与鼠标相关的函数:
setStyleSheet("BlockWidget {"
" color:white;"
" background-color: gray;"
" font-size:18px;"
" font-family:'Consolas';"
"}"
"BlockWidget:hover {"
" background-color: blue;"
"}");
<强> PS:强>
根据Qt样式表文档,QLabel
不支持:hover
伪状态,但是更改背景或边框似乎工作正常。
由于您的BlockWidget
小部件不是自己的BlockWidget
个孩子,并且因为您将样式表单独设置为所有这些,所以省略对象名称应该是安全的。 QSS选择器。