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

qt实现窗口的动态切换

先说一下整体思路。页面布局两个widget然后再将定时器和按钮关联起来。

定时器发出信号的时候,随着信号,不断地重新设置widget的宽度,实现窗口的动态切换。

具体操作如下:

class QtWidgetsApplication4 : public QMainWindow
{Q_OBJECT//切换的状态标志位enum class MoveActive{START,MOVING,FINISH};
public:QtWidgetsApplication4(QWidget *parent = Q_NULLPTR);//决定是否显示右边的widgetvoid showWidget(bool isShow);private:Ui::QtWidgetsApplication4Class ui;MoveActive m_status;bool showOrNot;QTimer * m_pTimer = nullptr;
};

具体函数实现如下

void QtWidgetsApplication4::showWidget(bool isShow)
{showOrNot = isShow;m_status = MoveActive::START;m_pTimer->start(30);
}
//首先设置一下窗口的尺寸int width = this->width();this->setFixedWidth(180);//初始状态只显示左边ui.widget_2->setFixedWidth(0);ui.widget_2->setVisible(false);ui.widget->setFixedWidth(195);ui.widget->setVisible(true);connect(ui.pushButton, &QPushButton::clicked, [&] {showWidget(true);});connect(ui.pushButton_2, &QPushButton::clicked, [&] {showWidget(false);});m_pTimer = new QTimer(this);connect(m_pTimer, &QTimer::timeout, [&] {switch (m_status){case QtWidgetsApplication4::MoveActive::START:ui.widget->setVisible(true);ui.widget_2->setVisible(true);m_status = MoveActive::MOVING;break;case QtWidgetsApplication4::MoveActive::MOVING:if (showOrNot){int leftWidth = ui.widget->width();leftWidth -= 10;int rightWidth = ui.widget_2->width();rightWidth += 10;if (rightWidth >= 175|| leftWidth <= 10){rightWidth = 175;leftWidth = 0;ui.widget->setFixedWidth(0);ui.widget_2->setFixedWidth(175);m_status = MoveActive::FINISH;break;}ui.widget->setFixedWidth(leftWidth);ui.widget_2->setFixedWidth(rightWidth);}else {//左侧变宽,右侧变窄int leftWidth = ui.widget->width();int rightWidth = ui.widget_2->width();leftWidth += 10;rightWidth -= 10;if (leftWidth>=175|| rightWidth <= 10){leftWidth = 175;rightWidth = 0;ui.widget->setFixedWidth(175);ui.widget_2->setFixedWidth(0);m_status = MoveActive::FINISH;break;}ui.widget->setFixedWidth(leftWidth);ui.widget_2->setFixedWidth(rightWidth);}break;case QtWidgetsApplication4::MoveActive::FINISH:m_pTimer->stop();break;default:break;}});

http://www.lryc.cn/news/501195.html

相关文章:

  • 第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题②
  • 【Vulkan入门】09-CreateFrameBuffer
  • FPGA设计-Vivado的Off-Chip Termination设置问题
  • GC常见垃圾回收算法,JVM分代模型
  • 面试题整理(三)
  • 可视化建模以及UML期末复习----做题篇
  • PostGIS分区表学习相关
  • JavaEE 【知识改变命运】03 多线程(3)
  • Flash操作 原子写 非原子写
  • 厦门凯酷全科技有限公司怎么样?
  • ubuntu 18.04设置命令行历史记录并同时显示执行命令的时间
  • 推荐系统里面的多任务学习概述
  • 解决uview ui赋值后表单无法通过验证
  • 【GL010】C/C++总结(二)
  • 【合作原创】使用Termux搭建可以使用的生产力环境(五)
  • 初始数据结构
  • 给我的小程序加了个丝滑的搜索功能,踩坑表情包长度问题
  • MATLAB中的合并分类数组
  • ShardingSphere-JDBC
  • 企业如何选择远程控制软件来远程IT运维?
  • Meta Llama 3.3 70B:性能卓越且成本效益的新选择
  • 【银河麒麟高级服务器操作系统】修改容器中journal服务日志存储位置无效—分析及解决方案
  • go语言zero框架对接阿里云消息队列MQ的rabbit的配置与调用
  • 《Vue进阶教程》第四课:reactive()函数详解
  • 【开源】A065—基于SpringBoot的库存管理系统的设计与实现
  • memmove函数(带图详解)
  • 【Java数据结构】时间和空间复杂度
  • 八斗深度学习
  • 安卓报错Switch Maven repository ‘maven‘....解决办法
  • Scala编程技巧:正则表达式与隐式转换