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()来设置需要显示的页面。

相关推荐
阿珊和她的猫29 分钟前
v-scale-scree: 根据屏幕尺寸缩放内容
开发语言·前端·javascript
fouryears_234173 小时前
Flutter InheritedWidget 详解:从生命周期到数据流动的完整解析
开发语言·flutter·客户端·dart
我好喜欢你~3 小时前
C#---StopWatch类
开发语言·c#
lifallen5 小时前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研5 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
cui__OaO6 小时前
Linux软件编程--线程
linux·开发语言·线程·互斥锁·死锁·信号量·嵌入式学习
鱼鱼说测试7 小时前
Jenkins+Python自动化持续集成详细教程
开发语言·servlet·php
艾莉丝努力练剑7 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
CHEN5_027 小时前
【Java基础面试题】Java基础概念
java·开发语言
杜子不疼.9 小时前
《Python学习之字典(一):基础操作与核心用法》
开发语言·python·学习