Qt5 QWidget:悬停效果延迟

时间:2017-10-26 17:46:42

标签: c++ css qt visual-c++ qt5

我正在尝试使用以下CSS在:hover上创建任何类型的QWidget效果:

QWidget.mis--MyButton {
    width: 300px;
    height: 300px;
    background:  white;
    /*cursor: pointer;*/
    font-family: Calibri;
    border-radius: 10px;
    border: 2px solid rgb(218, 218, 218); /*#007FEB;*/

    padding: 1px;
    margin-top: 2px;
}

QWidget.mis--MyButton:hover 
{
    border: 2px solid #007FEB; /*#007FEB;*/
}

但是,从鼠标进入小部件到效果出现的时间,有2-3秒的轻微延迟。

以下是所发生情况的截屏视频:

https://youtu.be/aNfEKabut-A

对于绘画,我使用以下代码:

void MyButton::paintEvent(QPaintEvent * event)
{ 
    QStyleOption opt;
    opt.init(this);
    QPainter p(this);   
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);

}

即使我试图摆脱CSS,即不加载任何CSS,只是尝试产生任何效果并使用Qt的风格,例如,这样:

style()->drawPrimitive(QStyle::PE_PanelButtonBevel, &opt, &p, this);

然后关闭CSS,我仍然得到同样的延迟。

这是一个效果相同的截屏视频,没有加载CSS并在QStyle::PE_PanelButtonBevel中选择了paintEvent选项:

https://youtu.be/kT10zdepsGk

计算机相当强大,Ryzen 7在Windows 10上,我使用的是VC ++ 2017,所以它不应该与之类似。

如果您需要更多代码,请告知我们。

谢谢!

1 个答案:

答案 0 :(得分:2)

对于大量项目的快速动画,建议使用QtQuick / QML场景。

QSS很慢,因为它需要大量重新计算并在CPU上进行。 QGraphicsScene工作得更快,但又一次 - 它是CPU,需要大量手工制作的可视化代码。