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

Qt5 Ubuntu18 QStackedWidget

       1、在实际项目开发过程遇到,如果通过UI插件的属性设置,通过对默认的两个页面进行提升需要切换操作的对象,如果该对象需要外部接口传入数据,实现界面信息的实时刷新,这样会失败,失败的原因很好理解,就是系统默认对类的操作,而我们外部接口调用需要实例化对象,因此我们外部调用的接口和提升默认的对象,不是同一个对象。

       通过代码实现添加对象,实现多页切换,是可以的,保证我们添加到QStackedWidget里面的对象也是我们外部调用的对象,数据可以相互交互,界面也是想要的显示结果。

       例如我这里创建两个实时刷新的页面对象:            

//切换图或表显示接口
int CRealTimeMonitor::SwitchShowType(EM_SHOW_TYPE eUiType)
{
    static bool bOper =false;
    if(!bOper)
    {
        bOper = true;

        m_crealtimeGraph = new CrealtimeGraph();
        m_crealtimeTable = new CRealtimeTable();
        ui->stackedWidget->addWidget(m_crealtimeTable);
        ui->stackedWidget->addWidget(m_crealtimeGraph);
    }

    if(eUiType == EM_SHOW_TYPE_TABLE)
    {
        ui->stackedWidget->setCurrentIndex(0);
    }
    else
    {
        ui->stackedWidget->setCurrentIndex(1);
    }
    return 0;
}

如果调试过程中出现,切换无效果,不要灰心, 这是因为如果通过拖拽的方式,在主界面上拖拽一个插件QStackedWidget,默认会有两个页面产生,因此我们代码添加两个对象,实际上已经包含四个对象了,因此调用ui->stackedWidget->setCurrentIndex(0)时候,代码逻辑没有问题,只是调用的索引号 0 或1 错了,根据默认顺序应该为3或4 才可以。

我们可以通过下面的代码,获取ui->stackedWidget里面到底包含了几个对象和当前默认的页面序号是多少。

// 切换页面
void MainWindow::switchPage()
{
      int nCount =  ui->stackedWidget->count();
      int nIndex =  ui->stackedWidget->currentIndex();
      // 获取下一个需要显示的页面索引
      ++nIndex;
      // 当需要显示的页面索引大于等于总页面时,切换至首页
      if (nIndex >= nCount)
         nIndex = 0;
     ui->stackedWidget->setCurrentIndex(nIndex);
}  

2、如果对象不存在对外调用接口,简单通过UI界面对stackedWidget属性中的页面设置需要提升的类和引用的头文件即可,对象内部通过按钮或则其他方式实现数据信息更新。

3、stackedWidget 主要接口信息分享

接口
int addWidget(QWidget * widget)
添加页面,并返回页面对应的索引

int count() const
获取页面数量

int currentIndex() const
获取当前页面的索引

QWidget * currentWidget() const
获取当前页面

int indexOf(QWidget * widget) const
获取QWidget页面所对应的索引

int insertWidget(int index, QWidget * widget)
在索引index位置添加页面

void removeWidget(QWidget * widget)
移除QWidget页面,并没有被删除,只是从布局中移动,从而被隐藏。

QWidget * widget(int index) const
获取索引index所对应的页面

信号
void currentChanged(int index)
当前页面发生变化时候发射,index为新的索引值

void widgetRemoved(int index)
页面被移除时候发射,index为页面对应的索引值

共有槽函数
void setCurrentIndex(int index)
设置索引index所在的页面为当前页面

void setCurrentWidget(QWidget * widget)
设置QWidget页面为当前页面

总结
一般情况,常用的两种方式:

根据currentWidget()来判断当前页面,然后通过setCurrentWidget()来设置需要显示的页面。

根据currentIndex()来判断当前页面索引,然后通过setCurrentIndex()来设置需要显示的页面。 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 路由守卫中使用next()跳转到指定路径时会无限循环
  • 【C/C++】【学生成绩管理系统】深度剖析
  • Hadoop-20 Flume 采集数据双写至本地+HDFS中 监控目录变化 3个Agent MemoryChannel Source对比
  • anaconda常用指令学习
  • 企业网络实验dhcp-snooping、ip source check,防非法dhcp服务器、自动获取ip(虚拟机充当DHCP服务器)、禁手动修改IP
  • 【爬虫】Python实现,模拟天眼查登录验证获取token
  • windows电脑的linux虚拟机连接电脑网络的方法
  • 项目收获总结--本地缓存方案选型及使用缓存的坑
  • 大数据基础:Hadoop之MapReduce重点架构原理
  • Stable Diffusion / huggingface 相关配置问题汇总
  • 移动端 火星坐标体系、百度坐标体系和全球坐标体系,该如何选择?
  • threadx netxduo stm32f407上实现http server
  • bug修复 修复修复修复
  • 【Git基本操作】添加文件 | 修改文件 | 及其各场景下.git目录树的变化
  • SpringBoot实战:处理全局异常
  • Consul Config 使用Git做版本控制的实现
  • Koa2 之文件上传下载
  • Object.assign方法不能实现深复制
  • Python十分钟制作属于你自己的个性logo
  • windows下使用nginx调试简介
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 排序(1):冒泡排序
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 线性表及其算法(java实现)
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 树莓派用上kodexplorer也能玩成私有网盘
  • #etcd#安装时出错
  • $ git push -u origin master 推送到远程库出错
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (2020)Java后端开发----(面试题和笔试题)
  • (C++哈希表01)
  • (多级缓存)缓存同步
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (四)stm32之通信协议
  • (算法二)滑动窗口
  • (转)h264中avc和flv数据的解析
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .Net Remoting常用部署结构
  • .Net 垃圾回收机制原理(二)
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET建议使用的大小写命名原则
  • .net连接MySQL的方法
  • .project文件
  • @RestControllerAdvice异常统一处理类失效原因
  • []Telit UC864E 拨号上网
  • [AutoSar]BSW_Com02 PDU详解
  • [C#]C# OpenVINO部署yolov8图像分类模型
  • [c#基础]值类型和引用类型的Equals,==的区别
  • [Java、Android面试]_05_内存泄漏和内存溢出
  • [Java]快速入门二叉树,手撕相关面试题
  • [javaee基础] 常见的javaweb笔试选择题含答案
  • [Oh My C++ Diary]用cout输出时后endl的使用