KM
8 октября 2020 г. 12:10

Qt animation c++ класс для анимации, с чего начать?

animation, qt, c++, abstractanimation

Здравствуйте,
хочу сделать класс для анимации так чтобы там обрабатывалось как можно больше информации, просто у меня есть куча виджетов а писать анимацию в каждом из них помоему не рационально, вот пример одного виджета с анимацией:

  1. #include "pinpoint.h"
  2. #include "ui_pinpoint.h"
  3. #include <QPropertyAnimation>
  4. #include <interfaces/fastproxystyle.h>
  5. #include <QGraphicsColorizeEffect>
  6. Connection& PinPoint::getConnection()
  7.  
  8. {
  9. return connection;
  10. }
  11.  
  12. int PinPoint::getId() const
  13. {
  14. return id;
  15. }
  16.  
  17. void PinPoint::setId(int value)
  18. {
  19. id = value;
  20. }
  21.  
  22. PinPoint::PinPoint(QWidget *parent) :
  23. QWidget(parent),
  24. connection(nullptr),
  25. ui(new Ui::PinPoint),
  26. notConnected("пункт", "ошибка", Error::Priority::CriticalError, true),
  27. zoneViolation("сигнализация", "нарушение", Error::Priority::CriticalError, true,true,true,"трубует проверки на месте")
  28. {
  29. ui->setupUi(this);
  30. this->layout()->setAlignment(ui->label, Qt::AlignCenter);
  31. connect(ui->pin, &PointShape::mouseOver, this, &PinPoint::mouseOverPin);
  32. connect(ui->pin, &PointShape::setupDeclared, this, &PinPoint::setupDeclared);
  33. connect(&connection, &Connection::currentStateUpdated, this, &PinPoint::updateState);
  34. connect(&connection, &Connection::updateView, this, &PinPoint::updateView);
  35. connect(&connection.getZonesWidget(), &ZonesListWidget::updateDB, this, &PinPoint::onUpdateEmit);
  36. this->setStyle(new FastProxyStyle(this->style()));
  37. connect(ui->pin, &PointShape::mouseOver1, this, &PinPoint::NoWidget);
  38.  
  39.  
  40. }
  41.  
  42. void PinPoint::fillSetup(const QString& address, const QString& name) {
  43. setIP(address);
  44. setName(name);
  45. connection.setConnectionData(getIP(), 7094);
  46. }
  47.  
  48. void PinPoint::updateState(CustomState *state, QList<Zone*> source){
  49. if(!source.isEmpty()) {
  50. if(state==&connection.getZonesWidget().alarm || state==&connection.getZonesWidget().silentAlarm) {
  51. QString helpString="";
  52. foreach(auto item, source) {
  53. helpString+=item->getId()+" ";
  54. }
  55. zoneViolation.setSource(this->getText());
  56. zoneViolation.setValue("проблема "+this->getText()+" (IP: "+this->getIP().toString()+"). в "+state->getName()+" пунктах: "+helpString);
  57. generateError(zoneViolation);
  58. }
  59. else cancelError(zoneViolation);
  60. }
  61.  
  62. ui->pin->setState(*state);
  63. refreshHint();
  64.  
  65. }
  66.  
  67. void PinPoint::updateView(const QHostAddress& address, uint16_t port)
  68. {
  69. ui->label_2->setText(address.toString());
  70. Q_UNUSED(port)
  71. }
  72.  
  73. void PinPoint::onUpdateEmit()
  74. {
  75. emit(updateDatabase(*this));
  76. }
  77.  
  78. void PinPoint::setPos(const QPointF &pos) {
  79. position = pos;
  80. this->move(Converter::toPointToMiddle(position, size()));
  81. }
  82.  
  83. bool PinPoint::isFakeElement()
  84. {
  85. return (getIP().toString()=="0.0.0.0");
  86. }
  87.  
  88. void PinPoint::mouseOverPin(){
  89. raise();
  90. if(!isFakeElement())
  91. emit mouseOverMe();
  92.  
  93.  
  94. QGraphicsColorizeEffect *eEffect= new QGraphicsColorizeEffect(ui->label);
  95. ui->label->setGraphicsEffect(eEffect);
  96. QPropertyAnimation *paAnimation = new QPropertyAnimation(eEffect,"color");
  97. paAnimation->setStartValue(QColor(Qt::darkBlue));
  98. paAnimation->setEndValue(QColor(Qt::red));
  99. paAnimation->setDuration(1000);
  100. paAnimation->start();
  101.  
  102. }
  103.  
  104. void PinPoint::NoWidget()
  105.  
  106. {
  107. QGraphicsColorizeEffect *eEffect= new QGraphicsColorizeEffect(ui->label);
  108. ui->label->setGraphicsEffect(eEffect);
  109. QPropertyAnimation *paAnimation = new QPropertyAnimation(eEffect,"color");
  110. paAnimation->setStartValue(QColor(Qt::red));
  111. paAnimation->setEndValue(QColor(Qt::darkBlue));
  112. paAnimation->setDuration(1000);
  113. paAnimation->start();
  114.  
  115. }
  116.  
  117. void PinPoint::setName(const QString &text)
  118. {
  119. ui->label->setText(text);
  120. notConnected.setSource(text);
  121. notConnected.setValue("сигнализация на обьекте "+text+" (ip:"+getIP().toString()+")!");
  122. }
  123. void PinPoint::refreshHint() {
  124. this->setToolTip("название: "+ui->label->text()+"\nIP: "+this->getIP().toString()+"\n"+connection.getZonesWidget().getInfoString());
  125. }
  126. void PinPoint::setIP(const QString& ip)
  127. {
  128. connection.setCentralAddress(QHostAddress(ip));
  129. ui->label_2->setText(ip);
  130. refreshHint();
  131. }
  132.  
  133. PinPoint::~PinPoint(){delete ui;}
  134. QPointF PinPoint::getPos() {return position;}
  135. QString PinPoint::getText() {return this->ui->label->text();}
  136. QString PinPoint::getStateString(){return ui->pin->getStateString();}
  137. QHostAddress PinPoint::getIP(){return connection.getCentralAddress();}
  138.  

можете помочь сложить (скелет или же конструктор) для класса анимации

2

Вам это нравится? Поделитесь в социальных сетях!

0

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
  • Последние комментарии
  • IscanderChe
    12 апреля 2025 г. 17:12
    Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
  • AK
    1 апреля 2025 г. 11:41
    Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
  • Evgenii Legotckoi
    9 марта 2025 г. 21:02
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    9 марта 2025 г. 16:14
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
  • ИМ
    22 ноября 2024 г. 21:51
    Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…