gpt4 book ai didi

qt - 在一段时间内逐渐更改 QPushButton 的背景颜色?

转载 作者:行者123 更新时间:2023-12-01 11:29:15 25 4
gpt4 key购买 nike

我已经厌倦了搜索!

我从 QPushbutton 继承了一个 Button 并将我的 QSS 设置为它。样式是需要的。

我想要的只是当按钮悬停时(enterevent 发生)按钮的颜色在特定时间(例如 0.2 秒)内发生变化,而不是立即发生变化(柔和的颜色变化)

我该怎么办?

*******在 PyQt4 中回答*********

class MyButton(QPushButton):
def __init__(self):
super(MyButton, self).__init__()
self.setMinimumSize(80,50)
self.setText('QPushButton')

def getColor(self):
return Qt.black

def setColor(self, color):
self.setStyleSheet("background-color: rgb({0}, {1}, {2});border:none;".format(color.red(), color.green(), color.blue()))

color=QtCore.pyqtProperty(QColor, getColor, setColor)

def enterEvent(self, event):
global anim
anim=QPropertyAnimation(self, "color")
anim.setDuration(200)
anim.setStartValue(QColor(216, 140, 230))
anim.setEndValue(QColor(230, 230, 230))
anim.start()

def leaveEvent(self, event):
self.setStyleSheet("background:none;")

最佳答案

解决方案之一是 - QPropertyAnimation 类。它不支持开箱即用的颜色更改,但由于您已经对按钮进行了子类化 - 这里是示例代码。

首先 - 您需要在您的类中定义新属性 - 就在 Q_OBJECT 宏之后。以及此属性的 getter 和 setter 方法,示例如下:

class AnimatedButton : public QPushButton
{

Q_OBJECT
Q_PROPERTY(QColor color READ color WRITE setColor)

public:
AnimatedButton (QWidget *parent = 0)
{
}
void setColor (QColor color){
setStyleSheet(QString("background-color: rgb(%1, %2, %3);").arg(color.red()).arg(color.green()).arg(color.blue()));
}
QColor color(){
return Qt::black; // getter is not really needed for now
}
};

然后在您处理 enterEvent 的事件处理程序中,您应该做这样的事情 -

// since it will be in event of button itself, change myButton to 'this'
QPropertyAnimation *animation = new QPropertyAnimation(myButton, "color");
animation->setDuration(200); // duration in ms
animation->setStartValue(QColor(0, 0, 0));
animation->setEndValue(QColor(240, 240, 240));
animation->start();

虽然你可能想确保在这个动画完成之前不开始新的动画,并通过一次又一次地调用 new 来确保你没有内存泄漏

关于qt - 在一段时间内逐渐更改 QPushButton 的背景颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34496675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com