m_dockpanel = new QDockPanel(ui->wvViewMap);m_dockpanel->setGeometry(100, 100, 200, 200);m_dockpanel->show();
void QDockPanel::slotChangeState(bool state){ QPropertyAnimation* animation = new QPropertyAnimation(this, "geometry"); QRect brect, erect; m_state = !state; // текущее состояние панели if(state) { if(m_stick == stick_t::LEFT_STICK) // левая панель { brect = QRect(0, 0, this->m_size.width(), this->m_size.height()); erect = QRect(0, 0, m_header->button()->width(), this->m_size.height()); } else if(m_stick == stick_t::RIGHT_STICK) // правая панель { brect = QRect(this->parentWidget()->geometry().width() - this->m_size.width(), 0, this->m_size.width(), this->m_size.height()); erect = QRect(this->parentWidget()->geometry().width() - m_header->button()->width(), 0, m_header->button()->width(), this->m_size.height()); } } else { if(m_stick == stick_t::LEFT_STICK) // левая панель { brect = QRect(0, 0, m_header->button()->width(), this->m_size.height()); erect = QRect(0, 0, this->m_size.width(), this->m_size.height()); } else if(m_stick == stick_t::RIGHT_STICK) // правая панель { brect = QRect(this->parentWidget()->geometry().width() - m_header->button()->width(), 0, m_header->button()->width(), this->m_size.height()); erect = QRect(this->parentWidget()->geometry().width() - this->m_size.width(), 0, this->m_size.width(), this->m_size.height()); } } animation->setDuration(m_duration); animation->setStartValue(brect); animation->setEndValue(erect); connect(animation, SIGNAL(finished()), this, SLOT(slotFinishedChangeState())); animation->start();}