社保网站人员减少怎么做三门峡住房和建设局网站
news/
2025/10/5 14:30:39/
文章来源:
社保网站人员减少怎么做,三门峡住房和建设局网站,whois查询,网站在线服务Qt实现可伸缩的侧边工具栏
一直在网上找#xff0c;发现大多的实现方案都是用一个按钮#xff0c;按下控制侧边栏的伸缩#xff0c;但是我想要实现鼠标悬浮在侧边栏的时候就伸出#xff0c;移开就收缩的功能#xff0c;也没找到好的参考#xff0c;所以决定自己实现一个…Qt实现可伸缩的侧边工具栏
一直在网上找发现大多的实现方案都是用一个按钮按下控制侧边栏的伸缩但是我想要实现鼠标悬浮在侧边栏的时候就伸出移开就收缩的功能也没找到好的参考所以决定自己实现一个只在C代码里面就可以实现了不需要用到qss。 效果演示
代码也是功能演示Demo用了显眼的颜色来突出功能。实际用的时候需要继续完善加入到项目中。 实现方法
首先看看我的主界面UI 可以看到我就是用了一个水平布局布局里就放置黄色和红色两个QWidget然后黄色的作为侧边栏黄色里面的布局不用管他只是用来布局侧边栏里面的功能键然后红色的不会去动他。
给黄色的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);重写事件在事件中使用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.mzph.cn/news/928343.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!