Всех приветствую.
Хотел узнать по поводу класса PQColorAnimation
Насколько я понимаю он устаревший и более не поддерживается.
А есть альтернатива в новых версиях или как быть?
Moderator: ArtMares
$app = new QApplication($argc, $argv); class MainWindow extends QWidget { private $animation; private $label; public function __construct() { parent::__construct(); $this->initComponents(); // Объявляем пользовательское свойство и устанавливаем ему значение $this->setProperty("myprop", new QColor("#ff0000")); // Создаём QPropertyAnimation для управления свойством `myprop`, // объект необходимо создать как член класса, чтобы он не был удалён сборщиком мусора PHP $this->animation = new QPropertyAnimation($this, "myprop"); $this->animation->setDuration(10000); // Устанавливаем начальное и конечное значения цветов $this->animation->setStartValue(new QColor("#ff0000")); $this->animation->setEndValue(new QColor("#0000ff")); // Соединяем сигнал обновления пользовательского свойства с обработчиком // Обратите внимание, что сигнал QPropertyAnimation::valueChanged передаёт аргумент с типом QVariant $this->animation->onValueChanged = function($sender, $value) { // а это "магия" QVariant: мы превращаем его обратно в объект QColor $color = qvariant_cast("QColor", $value); // далее обновляем стиль виджета $this->styleSheet = 'background: ' . $color->name(); // укороченная запись данного действия могла выглядеть так: // $this->styleSheet = 'background: ' . (qvariant_cast("QColor", $value))->name(); $this->label->text = $color->name(); // по завершению работы этой функции будет удалено 2 объекта: $value и $color }; // Запускаем анимацию $this->animation->start(); // Три объекта QColor, созданных ранее, будут удалены по завершению работы этой функции } private function initComponents() { $this->label = new QLabel; $this->label->styleSheet = "font-size: 30px;" . "qproperty-alignment: AlignCenter;"; $font = $this->label->font(); $font->setStyleStrategy(QFont::PreferAntialias); $this->label->setFont($font); $this->setLayout(new QVBoxLayout); $this->layout()->addWidget($this->label); } } $mainWindow = new MainWindow; $mainWindow->resize(300, 300); $mainWindow->show(); return $app->exec();