Qt5 QWidget :hover效果延迟

5
我正在尝试使用以下CSS在我的QWidget上创建任何类型的:hover效果:
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

我的电脑非常强大,运行着Windows 10上的Ryzen 7,我正在使用VC++ 2017,所以不应该与这些有关。

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

谢谢!


1
  1. 你尝试过对你的代码进行性能分析吗?
  2. 为什么你不使用Qt MVC、QML或Qt图形场景?
- Dmitry Sazonov
嗯,主要是因为我不知道它(QML) :-) 我会去了解一下,并在几天后看看它是否真正对我有所帮助。谢谢! - Dushan Savich
1
你尝试过使用jQuery吗?认真的说,不要听那个人的话。你的代码没有问题。我在一个更旧的Windows 7机器上使用MinGW无法复现这个问题。而且这只是标准代码。也许你是在调试器中运行程序?Qt Creator中的CDB调试器集成有时可能会非常缓慢。 - SteakOverflow
@DushanSavich,你能回答一下关于调试版本和调试器的问题吗?如果你在发布模式下看到了差异,也请告诉我。对于 CPU 占用过高的问题,请注意,在一个 4 核 CPU 上,25% 的占用率就足以拖慢单线程应用程序的运行速度。 - Benjamin T
1
@DushanSavich 我不在乎分数 :), 很高兴你解决了问题。无论如何,你可以接受一个答案。 - Dmitry Sazonov
显示剩余6条评论
1个回答

2
对于具有大量项目的快速动画,建议使用QtQuick/QML场景。 QSS很慢,因为它需要进行大量的重新计算并在CPU上完成。QGraphicsScene工作速度更快,但同样是CPU,并且需要大量手工可视化代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接