当前位置: 首页 > news >正文

厦门市城市建设档案馆的网站竞拍网站模板

厦门市城市建设档案馆的网站,竞拍网站模板,品牌策划公司的介绍,网站网站是怎么做的Qt实现可伸缩的侧边工具栏 一直在网上找,发现大多的实现方案都是用一个按钮,按下控制侧边栏的伸缩,但是我想要实现鼠标悬浮在侧边栏的时候就伸出,移开就收缩的功能,也没找到好的参考,所以决定自己实现一个…

Qt实现可伸缩的侧边工具栏

一直在网上找,发现大多的实现方案都是用一个按钮,按下控制侧边栏的伸缩,但是我想要实现鼠标悬浮在侧边栏的时候就伸出,移开就收缩的功能,也没找到好的参考,所以决定自己实现一个,只在C++代码里面就可以实现了,不需要用到qss。


效果演示

代码也是功能演示Demo,用了显眼的颜色来突出功能。实际用的时候需要继续完善加入到项目中。
在这里插入图片描述


实现方法

  1. 首先看看我的主界面UI

在这里插入图片描述
可以看到我就是用了一个水平布局,布局里就放置黄色和红色两个QWidget,然后黄色的作为侧边栏(黄色里面的布局不用管他,只是用来布局侧边栏里面的功能键),然后红色的不会去动他。

  1. 给黄色的QWidget使用重写悬浮事件来控制伸缩

需要先用到语句给黄色侧边栏开启悬浮事件判断

 ui->widget->setAttribute(Qt::WA_Hover, true);

在主窗口类里需要重写两个事件(待会再写具体实现),分别是

protected:
1. bool eventFilter(QObject* obj, QEvent* event);
2. void resizeEvent(QResizeEvent* event);

然后要给黄色侧边栏加载主窗口的事件,才能用到在主窗口类中重写的事件

ui->widget->installEventFilter(this);
  1. 重写事件,在事件中使用QPropertyAnimation来控制伸缩动画

在主窗口类中先声明一个私有变量QPropertyAnimation* propertyAnimation提供给事件调用。再声明一个布尔值bool sideFlag = true来表示当前侧边栏的伸缩状态。

  • 在主窗口构造函数中初始化propertyAnimation
propertyAnimation = new QPropertyAnimation(ui->widget, "geometry");
propertyAnimation->setEasingCurve(QEasingCurve::InOutQuint);
propertyAnimation->setDuration(200);
  • 重写事件resizeEvent:
void QtApplication::resizeEvent(QResizeEvent* event)
{width = ui->widget->width();				//width和height都是主窗口类的私有变量height = ui->centralWidget->height();propertyAnimation->setStartValue(QRect(-1, 0, 10, height));		//参数代表左,上,右,下坐标propertyAnimation->setEndValue(QRect(-1, 0, width, height));
}

这一步是为了重新设置当前窗口下的伸缩的起点和重点位置坐标。这一步是难点:在布局下的widget的长度和宽度都是经过改变的,不在resize事件下重新获取widget的长度和宽度,只会得到最初始的无布局下的widget的长度和宽度,简单的说不是正确的数据,需要在resizeEvent下或者paintEvent下“在程序运行后”“延后地”获取widget的长度和宽度才是正确的尺寸数据。

  • 重写事件eventFilter:
bool QtApplication::eventFilter(QObject* obj, QEvent* event)
{if (obj == ui->widget){if (event->type() == QEvent::HoverEnter)	//鼠标进入黄色侧边栏中悬浮,正向播动画{propertyAnimation->setDirection(QAbstractAnimation::Forward);propertyAnimation->start();return true;}else if (event->type() == QEvent::HoverLeave) //鼠标离开黄色侧边栏,反向播动画{propertyAnimation->setDirection(QAbstractAnimation::Backward);propertyAnimation->start();return false;}}return QWidget::eventFilter(obj, event);
}

实现逻辑不难,可以理解上述内容后自己写出来就行,最关键的点就是获取widget的width和height一定要准确! 在这点上我摸了很久,后面总算在resizeEvent中成功获取到了准确的数据。

http://www.yayakq.cn/news/959448/

相关文章:

  • 河北省做网站哪家公司好免费手机网站源码
  • 企业网站建设有哪些网站开发需求规格说明书
  • 旅游seo整站优化选thinkphp还是wordpress
  • 网站优化 保定wordpress建社群
  • 临汾网站建设 吕梁网站建设网站的建设工具实施过程
  • 做店铺首页的网站做艺术教育类网站如何申请
  • 东莞寮步网站建设网络公司快手刷赞网站推广软件
  • 网站开发实现前后端分离常德论坛网站
  • 视频黄台在线观看app关键词排名优化
  • 三站合一网站营销开发小程序的软件有哪些
  • 乡镇网站模板wordpress读什么意思
  • 建设网站公司兴田德润i优惠吗河南网站定制
  • 建设工程 质量 协会网站南昌网站建设推广
  • 简单的网站开发互联网公司黑话
  • 云购网站建设网站开发手册下载
  • 邯郸做网站公司哪家好高端电子网站建设
  • 做外贸的物流网站有哪些个人印章在线制作网站
  • 上海雍熙网站建设龙岩e网站
  • 苏州电信网站备案管理系统网站
  • 国内外贸网站建设什么是网络营销代理
  • 小程序免费制作网站海南住房城乡建设网站
  • 网站售后服务网站系统管理计划
  • 网站内容优化方法有哪些上海三凯监理建设管理咨询公司网站
  • 网站建立需要什么做网站技术服务费属于什么科目
  • 网站的标志是什么字体上不了国外网站怎么做外贸
  • 制作网站需要域名还需要什么沈阳网络优化公司哪家好
  • 用tomcat做网站目录免费做图软件电脑版
  • 微网站开发 培训c sql网站开发
  • 跨境电商平台网站建设广州the7 wordpress 主题
  • 头像设计易做图网站wordpress 增删改查 函数