KM
8 октября 2020 г. 12:10
Qt animation c++ класс для анимации, с чего начать?
animation, qt, c++, abstractanimation
Здравствуйте,
хочу сделать класс для анимации так чтобы там обрабатывалось как можно больше информации, просто у меня есть куча виджетов а писать анимацию в каждом из них помоему не рационально, вот пример одного виджета с анимацией:
- #include "pinpoint.h"
- #include "ui_pinpoint.h"
- #include <QPropertyAnimation>
- #include <interfaces/fastproxystyle.h>
- #include <QGraphicsColorizeEffect>
- Connection& PinPoint::getConnection()
- {
- return connection;
- }
- int PinPoint::getId() const
- {
- return id;
- }
- void PinPoint::setId(int value)
- {
- id = value;
- }
- PinPoint::PinPoint(QWidget *parent) :
- QWidget(parent),
- connection(nullptr),
- ui(new Ui::PinPoint),
- notConnected("пункт", "ошибка", Error::Priority::CriticalError, true),
- zoneViolation("сигнализация", "нарушение", Error::Priority::CriticalError, true,true,true,"трубует проверки на месте")
- {
- ui->setupUi(this);
- this->layout()->setAlignment(ui->label, Qt::AlignCenter);
- connect(ui->pin, &PointShape::mouseOver, this, &PinPoint::mouseOverPin);
- connect(ui->pin, &PointShape::setupDeclared, this, &PinPoint::setupDeclared);
- connect(&connection, &Connection::currentStateUpdated, this, &PinPoint::updateState);
- connect(&connection, &Connection::updateView, this, &PinPoint::updateView);
- connect(&connection.getZonesWidget(), &ZonesListWidget::updateDB, this, &PinPoint::onUpdateEmit);
- this->setStyle(new FastProxyStyle(this->style()));
- connect(ui->pin, &PointShape::mouseOver1, this, &PinPoint::NoWidget);
- }
- void PinPoint::fillSetup(const QString& address, const QString& name) {
- setIP(address);
- setName(name);
- connection.setConnectionData(getIP(), 7094);
- }
- void PinPoint::updateState(CustomState *state, QList<Zone*> source){
- if(!source.isEmpty()) {
- if(state==&connection.getZonesWidget().alarm || state==&connection.getZonesWidget().silentAlarm) {
- QString helpString="";
- foreach(auto item, source) {
- helpString+=item->getId()+" ";
- }
- zoneViolation.setSource(this->getText());
- zoneViolation.setValue("проблема "+this->getText()+" (IP: "+this->getIP().toString()+"). в "+state->getName()+" пунктах: "+helpString);
- generateError(zoneViolation);
- }
- else cancelError(zoneViolation);
- }
- ui->pin->setState(*state);
- refreshHint();
- }
- void PinPoint::updateView(const QHostAddress& address, uint16_t port)
- {
- ui->label_2->setText(address.toString());
- Q_UNUSED(port)
- }
- void PinPoint::onUpdateEmit()
- {
- emit(updateDatabase(*this));
- }
- void PinPoint::setPos(const QPointF &pos) {
- position = pos;
- this->move(Converter::toPointToMiddle(position, size()));
- }
- bool PinPoint::isFakeElement()
- {
- return (getIP().toString()=="0.0.0.0");
- }
- void PinPoint::mouseOverPin(){
- raise();
- if(!isFakeElement())
- emit mouseOverMe();
- QGraphicsColorizeEffect *eEffect= new QGraphicsColorizeEffect(ui->label);
- ui->label->setGraphicsEffect(eEffect);
- QPropertyAnimation *paAnimation = new QPropertyAnimation(eEffect,"color");
- paAnimation->setStartValue(QColor(Qt::darkBlue));
- paAnimation->setEndValue(QColor(Qt::red));
- paAnimation->setDuration(1000);
- paAnimation->start();
- }
- void PinPoint::NoWidget()
- {
- QGraphicsColorizeEffect *eEffect= new QGraphicsColorizeEffect(ui->label);
- ui->label->setGraphicsEffect(eEffect);
- QPropertyAnimation *paAnimation = new QPropertyAnimation(eEffect,"color");
- paAnimation->setStartValue(QColor(Qt::red));
- paAnimation->setEndValue(QColor(Qt::darkBlue));
- paAnimation->setDuration(1000);
- paAnimation->start();
- }
- void PinPoint::setName(const QString &text)
- {
- ui->label->setText(text);
- notConnected.setSource(text);
- notConnected.setValue("сигнализация на обьекте "+text+" (ip:"+getIP().toString()+")!");
- }
- void PinPoint::refreshHint() {
- this->setToolTip("название: "+ui->label->text()+"\nIP: "+this->getIP().toString()+"\n"+connection.getZonesWidget().getInfoString());
- }
- void PinPoint::setIP(const QString& ip)
- {
- connection.setCentralAddress(QHostAddress(ip));
- ui->label_2->setText(ip);
- refreshHint();
- }
- PinPoint::~PinPoint(){delete ui;}
- QPointF PinPoint::getPos() {return position;}
- QString PinPoint::getText() {return this->ui->label->text();}
- QString PinPoint::getStateString(){return ui->pin->getStateString();}
- QHostAddress PinPoint::getIP(){return connection.getCentralAddress();}
можете помочь сложить (скелет или же конструктор) для класса анимации
2
252
Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
- Последние комментарии
- AK1 апреля 2025 г. 11:41Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
- VP9 марта 2025 г. 16:14Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
- ИМ22 ноября 2024 г. 21:51Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
- Сейчас обсуждают на форуме
- f15 февраля 2025 г. 13:46Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
- Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.