QT中实现折叠式按钮

这篇具有很好参考价值的文章主要介绍了QT中实现折叠式按钮。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、实现思路

再很多应用我们都会用到折叠式按钮功能。讲一下简单思路,利用QpropertyAnimation实现动画播放,然后计算好动画的起始和结束位置,将整体布局尽心偏移,我们就能达到折叠式按钮的功能。

二、代码

本示例因项目原因我用的label实现,换成button即可。
头文件部分:
public:
bool eventFilter(QObject *obj, QEvent *event);	// 添加时间过滤器声明  label无点击事件 故需要用事件过滤的方式
private:
	QPropertyAnimation *propertyAnimation;//布局部分动画
	QPropertyAnimation *propertyAnimationlabel;//label部分动画
	bool isside_Flage = false;//折叠状态标志位
cpp部分

绑定部分
	ui.label_8->installEventFilter(this);//label安装事件过滤器
	//动画分别绑定对应的布局或控件
	propertyAnimation = new QPropertyAnimation(ui.tabWidget, "geometry");
	propertyAnimation->setEasingCurve(QEasingCurve::InOutQuint);
	propertyAnimation->setDuration(300);
	
	propertyAnimationlabel = new QPropertyAnimation(ui.label_8, "geometry");
	propertyAnimationlabel->setEasingCurve(QEasingCurve::InOutQuint);
	propertyAnimationlabel->setDuration(300);
实现部分
bool videoshowi::eventFilter(QObject * obj, QEvent * event)
{
	Q_UNUSED(event)
	if (obj == ui.label_8)//指定某个QLabel
	{
		if (event->type() == QEvent::MouseButtonPress) //鼠标点击
		{
			QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event); // 事件转换

			if (mouseEvent->button() == Qt::LeftButton)
			{
				if (!isside_Flage)//折叠
				{
					propertyAnimation->setStartValue(QRect(this->rect().width(), ui.tabWidget->geometry().topLeft().y(), ui.tabWidget->width(), ui.tabWidget->height()));
					propertyAnimation->setEndValue(QRect(this->rect().width(), ui.tabWidget->geometry().topLeft().y(), ui.tabWidget->width(), ui.tabWidget->height()));
					propertyAnimation->start();
					propertyAnimationlabel->setStartValue(QRect(this->rect().width() - ui.label_8->width(), ui.label_8->geometry().topLeft().y(), ui.label_8->width(), ui.label_8->height()));
					propertyAnimationlabel->setEndValue(QRect(this->rect().width() - ui.label_8->width(), ui.label_8->geometry().topLeft().y(), ui.label_8->width(), ui.label_8->height()));
					propertyAnimationlabel->start();
					isside_Flage = !isside_Flage;
					return true;
				}
				else//回复
				{
					propertyAnimation->setStartValue(QRect(this->rect().width()- (ui.tabWidget->geometry().topRight().x()- ui.tabWidget->geometry().topLeft().x()), ui.tabWidget->geometry().topLeft().y(), ui.tabWidget->width(), ui.tabWidget->height()));
					propertyAnimation->setEndValue(QRect(this->rect().width() - (ui.tabWidget->geometry().topRight().x() - ui.tabWidget->geometry().topLeft().x()), ui.tabWidget->geometry().topLeft().y(), ui.tabWidget->width(), ui.tabWidget->height()));
					propertyAnimation->start();
					propertyAnimationlabel->setStartValue(QRect(this->rect().width() - ui.label_8->width()- (ui.tabWidget->geometry().topRight().x() - ui.tabWidget->geometry().topLeft().x()), ui.label_8->geometry().topLeft().y(), ui.label_8->width(), ui.label_8->height()));
					propertyAnimationlabel->setEndValue(QRect(this->rect().width() - ui.label_8->width()- (ui.tabWidget->geometry().topRight().x() - ui.tabWidget->geometry().topLeft().x()), ui.label_8->geometry().topLeft().y(), ui.label_8->width(), ui.label_8->height()));
					propertyAnimationlabel->start();
					isside_Flage = !isside_Flage;
					return true;
				}

			}
			else
			{
				return false;
			}
		}
		else
		{
			return false;
		}
	}
	else
	{
		// pass the event on to the parent class
		return QWidget::eventFilter(obj, event);
	}
}

三、演示效果

qt折叠收起控件,QT,qt,ui,开发语言
效果中标签我是用的竖线图片,可以自己搜索一些美观的折叠式按钮图片放上去文章来源地址https://www.toymoban.com/news/detail-602580.html

到了这里,关于QT中实现折叠式按钮的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt QCheckBox复选按钮控件

    Qt中的复选按钮类是 QCheckBox 它和单选按钮很相似,单选按钮常用在“多选一”的场景,而复选按钮常用在\\\"多选多\\\"的场景 比如喜欢的水果选项中,可以在“苹果/桃/梨/橘子/香蕉”中选择多个。 QRadioButton 有很多属性,完整的可查看帮助文档。这里列出常用的属性和方法。 这

    2024年02月01日
    浏览(48)
  • Qt QRadioButton单选按钮控件

    Qt中的单选按钮类是 QRadioButton 它是一个可以切换选中( checked )或未选中( unchecked )状态的单选按钮 单选按钮常用在“多选一”的场景,也就是说,在一组单选按钮中,一次只能选中一个单选按钮 比如性别中的“男女”二选一,学历中的“博士/硕士/本科/其他”四选一,

    2024年02月03日
    浏览(49)
  • QT学习07:五种按钮控件

    文章首发于我的个人博客:欢迎大佬们来逛逛 完整Qt学习项目地址:源码地址 是所有按钮类的祖先。 QAbstractButton的信号 : void clicked (bool checked = false) : 是否选中按钮 void pressed (): 点击按钮 void released (): 释放按钮 void toggled (bool checked): 检测 是否被选中 最常用的按钮控

    2024年02月09日
    浏览(45)
  • QT学习 控件(一):五种按钮类

    QAbstractButton的信号 : void clicked(bool checked = false) : 是否选中按钮 void pressed(): 点击按钮 void released(): 释放按钮 void toggled(bool checked): 切换按钮的状态 最常用的按钮控件之一。 构造函数: 设置图标,文本信息,父窗口 常用操作: 序号 函数描述 1 int void setAutoDefault(bool) 设

    2024年02月02日
    浏览(53)
  • QT中怎么使用QPalette设置按钮控件背景色

    💂 个人主页:pp不会算法 v 🤟 版权: 本文由【pp不会算法 v 】原创、在CSDN首发、需要转载请联系博主 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 关于以上代码:并没有实现设置按钮控件的背景色 但是参照QT的帮助文档: 照上面这么讲确实应该可

    2024年02月11日
    浏览(48)
  • 【QT入门】 Qt自定义控件与样式设计之QPushButton实现鼠标悬浮按钮弹出对话框

    往期回顾: 【QT入门】 Qt自定义控件与样式设计之qss选择器-CSDN博客 【QT入门】 Qt自定义控件与样式设计之QLineEdit的qss使用-CSDN博客 【QT入门】Qt自定义控件与样式设计之QPushButton常用qss-CSDN博客 鼠标悬浮弹出对话框的功能:最终要实现纯代码设计出一个音量按钮,当鼠标悬浮

    2024年04月23日
    浏览(41)
  • Qt 不规则窗口,不规则按钮,不规划控件 不规则界面

    类似: Qt 实现 不规则样式设置,不是视觉欺骗,是真正的不规则 ,点击外面不会触发按钮的点击信号. 效果: 显示成一张图片中的图形,使用带有透明区域的png图片; 这里注意:  必须重新绘制,构造函数也一定要调用resize。 见视频,可见,点击到空白处,消失;可见实

    2024年02月09日
    浏览(56)
  • 简单实用折叠面板可以折叠收起展开内容区域

    前端简单实用折叠面板可以折叠收起展开内容区域, 阅读全文下载完整代码请关注微信公众号: 前端组件开发 效果图如下:       代码如下:  # 简单实用折叠面板可以折叠收起展开内容区域。 #### 使用方法 ```使用方法 !-- leftText:做标题  rigText: 有注明文字 isOpen:展开折叠状态

    2024年02月08日
    浏览(82)
  • QT(C++)-QTreeview节点折叠与展开

    最近要用QT开发项目,对QT不是很熟,就根据网上的查到的知识和自己的摸索,将一些经验和知识记录下来。方便自己后续查找。 这个博客主要是QTreeview的节点折叠和展开。

    2024年02月10日
    浏览(35)
  • 前端vue简单实用折叠面板可以折叠收起展开内容区域

    随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。通过组件化开发,可以有效实现单独开发,单独维护,而且他们之间可以随

    2024年02月06日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包