ورود

View Full Version : سوال: تغییر رنگ پس زمینه QLabel با اجرای انیمیشن



sd.CSharpProgrammer
پنج شنبه 26 آذر 1394, 07:12 صبح
سلام خدمت اساتید محترم


من میخوام وقتی روی یک دکمه کلیک شد رنگ پس زمینه QLabel عوض بشه اما اینکار به شکل انیمیشن در بازه زمانی خاصی انجام بشه. برای اینکار سعی کردم از کلاس QPropertyAnimation استفاده کنم اما نتیجه ای نگرفتم. همچنین سعی کردم خصوصیات کلاس QPalette رو تغییر بدم بازم نشد. این کدی هست که من نوشتم:


QPropertyAnimation *animation = new QPropertyAnimation(ui->label1, "styleSheet");


animation->setStartValue("background-color: rgb(240, 240, 240)");
animation->setEndValue("background-color: rgb(126, 194, 66)");
animation->setDuration(3000);


animation->start();



دوستان آیا میشه همچین کاری کرد؟ اگه میشه لطفاً بنده رو راهنمایی کنید که چطوری اینکار رو انجام بدم. قبلاً تو گوگل دنبال راه حل زیاد گشتم اما چیزی پیدا نشد!


ممنون میشم اساتید کمک کنند
با سپاس

sd.CSharpProgrammer
یک شنبه 29 آذر 1394, 00:05 صبح
کسی نیست به من کمک کنه؟؟؟؟؟
:افسرده::افسرده::افسرده:

IMAN4k
یک شنبه 06 دی 1394, 21:28 عصر
در مرحله اول باید label یا ویجت خودتون رو subclass کنید چون property هایی مثل qss و یا color جزو property های ویجت حساب نمیشن و نمیتونید به عنوان property به QPropertyAnimation بدید.
در مرحله بعد باید برای property خودتون در کلاس getter و setter تعریف کنید.
مثال از stackoverflow برای تغییر رنگ زمینه QPushButton در حالت hover :

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.bl ue()));
}
QColor color(){
return Qt::black;
}
};

این کد هم باید در enterevent اور راید شه برای حالت hover :
QPropertyAnimation *animation = new QPropertyAnimation(this, "color");
animation->setDuration(200); // duration in ms
animation->setStartValue(QColor(0, 0, 0));
animation->setEndValue(QColor(240, 240, 240));
animation->start();

حالا شما بر اساس مثال بالا میتونید تو کلاس خودتون یک باتن تعریف کنید و کانکت بدید به فانکشن که میخوایید تغییرات درون اون صورت بگیره