二、原理详解
实现这个隐藏侧边栏的主要思想是侧边栏的显示和隐藏,显示和隐藏只需要移动Widget到可看见的区域(窗口区域)和不可看见的区域(窗口区域之外)即可。可以使用QPropertyAnimation属性动画,绑定Widget的geometry属性,实现显示和隐藏的动画效果,关键代码如下:
mainWdt::mainWdt(QWidget *parent)
: QWidget(parent)
, ui(new Ui::mainWdt)
{
ui->setupUi(this);
side_Flag = true;
m_sideWdt_Ptr = new sideWidget(this);
m_sideWdt_Ptr->move(this->rect().width() + m_sideWdt_Ptr->width(),0);
sideWidgetAnimation = new QPropertyAnimation(m_sideWdt_Ptr,"geometry");
sideWidgetAnimation->setEasingCurve(QEasingCurve::InOutQuint);
sideWidgetAnimation->setDuration(1000);
}
void mainWdt::mouseDoubleClickEvent(QMouseEvent *event)
{
QWidget::mouseDoubleClickEvent(event);
if(side_Flag) //侧边栏隐藏状态,显示
{
sideWidgetAnimation->setStartValue(QRect(this->rect().width(),0,m_sideWdt_Ptr->width(),m_sideWdt_Ptr->height()));
sideWidgetAnimation->setEndValue(QRect(this->rect().width()-m_sideWdt_Ptr->width(),0,m_sideWdt_Ptr->width(),m_sideWdt_Ptr->height()));
sideWidgetAnimation->start();
side_Flag = !side_Flag;
}
else //侧边栏显示状态,隐藏
{
sideWidgetAnimation->setStartValue(QRect(this->rect().width()-m_sideWdt_Ptr->width(),0,m_sideWdt_Ptr->width(),m_sideWdt_Ptr->height()));
sideWidgetAnimation->setEndValue(QRect(this->rect().width(),0,m_sideWdt_Ptr->width(),m_sideWdt_Ptr->height()));
sideWidgetAnimation->start();
side_Flag = !side_Flag;
}
}



