Jeder hat schöne animierte Bilder im Internet gesehen. Sie können als Datei mit der Erweiterung gif auf Ihren Computer heruntergeladen werden. Es stellt sich die Frage: Kann ich diese Bilder in meinen Programmen verwenden? Es ist möglich, antwortet die Qt-Bibliothek. Überlegen Sie, wie das geht.
Erstellen Sie ein neues Projekt vom Typ Qt-Widgets. Wir fügen ein QMovie-Objekt hinzu, um die Animation abzuspielen. Auf dem Formular platzieren wir ein Objekt der Klasse QLabel. Geben Sie im Anwendungsdesigner den Dateinamen für das Animationsobjekt an:
mo.setFileName(":/ico/loader.gif");
Den Zeiger auf dieses Objekt übergeben wir in label:
ui->label->setMovie(&mo);
Wir starten die Animationswiedergabe:
mo.start();
Widget.h-Datei
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QMovie> namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); private slots: void setSpeedMovie(int); void setSizeMovie(int); private: Ui::Widget *ui; QMovie mo; double m; }; #endif // WIDGET_H
Die QMovie-Klasse bietet Funktionen zum Steuern der Wiedergabegeschwindigkeit von setSpeed() und der Skalierung setScaledSize(). Die erste Funktion ist die Übertragung der relativen Abspielgeschwindigkeit in Prozent (100 - Nenngeschwindigkeit, 200 - doppelt), die zweite Dimension des Rechtecks, in das Sie Ihre Zeichnung einfügen möchten. Dieses Programm implementiert die Skalierungs- und Geschwindigkeitsverwaltung unter Verwendung von zwei QSpinBox-Objekten. Die Variable m vom Typ double wird benötigt, um die Proportionen des gif-Bildes beim Skalieren zu erhalten.
widget.cpp-Datei
#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); QPixmap pix(":/ico/loader.gif"); m = double(pix.width())/pix.height(); mo.setFileName(":/ico/loader.gif"); setSpeedMovie(ui->spinBox->value()); setSizeMovie(ui->spinBox_2->value()); ui->label->setMovie(&mo); mo.start(); connect(ui->spinBox, SIGNAL(valueChanged(int)), this, SLOT(setSpeedMovie(int))); connect(ui->spinBox_2, SIGNAL(valueChanged(int)), this, SLOT(setSizeMovie(int))); } Widget::~Widget() { delete ui; } void Widget::setSpeedMovie(int s) { mo.setSpeed(s); } void Widget::setSizeMovie(int size) { mo.setScaledSize(QSize(size*m, size)); }
Die Verwendung von GIF-Animationen kann nützlich sein, um entweder eine Anwendung zu dekorieren oder einige Prozesse zu visualisieren, z. B. das Hochladen oder Fortschreiten. Die Animationswiedergabe kann mit dem stop()-Slot gestoppt werden. Das Projekt kann von link heruntergeladen werden.
Добрый день, Dmitras.