第二十五课、布局管理器(四)------------------狄泰软件学院
一、栈式布局管理器
1、栈式布局管理器(QStatckedLayout)概要
(1)、所有组件垂直于屏幕的方向上被管理
(2)、每次只有一个组件会显示在屏幕上
(3)、只有最顶层的组件会被最终显示
2、栈式布局管理器的特点
(1)、组件大小一致且充满父组件的显示区
(2)、不能直接嵌套其它布局管理器(可以依赖中间组件间接嵌套)
(3)、能够自由切换需要显示的组件
(4)、每次能且仅能显示一个组件
3、QStatckedLayout的用法概要
二、计时器
1、计时器的概念
(1)、计时器是工程开发中非常重要的概念
(2)、计时器用于每隔一定的时间触发一个消息
(3)、计时器消息最终会被转化为函数调用
(4)、宏观上:计时器在每隔时间间隔会调用指定的函数
2、计时器(QTimer)的使用方法
(1)、编写计时器消息处理函数
(2)、在程序中创建计时器对象
(3)、连接计时器消息和消息处理函数
(4)、设置计时器时间间隔并启动计时
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#ifndef WIDGET_H #define WIDGET_H #include <QtGui/QWidget> #include <QPushButton> class Widget : public QWidget { Q_OBJECT private: QPushButton Btn1; QPushButton Btn2; QPushButton Btn3; QPushButton Btn4; void initControl(); private slots: void outtime(); public: Widget(QWidget *parent = 0); ~Widget(); }; #endif // WIDGET_H
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include "Widget.h" #include <QStackedLayout> #include <QHBoxLayout> #include <QTimer> Widget::Widget(QWidget *parent) : QWidget(parent), Btn1(this), Btn2(this), Btn3(this), Btn4(this) { initControl(); } void Widget::initControl() { Btn1.setText("Btn1"); Btn2.setText("Btn2"); Btn3.setText("Btn3"); Btn4.setText("Btn4"); QStackedLayout* slayout = new QStackedLayout(); QHBoxLayout* hlayout = new QHBoxLayout();//通过间接的方法来嵌套布局管理器 QWidget* widget = new QWidget(); Btn2.setParent(widget); Btn3.setParent(widget); hlayout->addWidget(&Btn2); hlayout->addWidget(&Btn3); widget->setLayout(hlayout); slayout->addWidget(&Btn1);//0 slayout->addWidget(widget);//1 slayout->addWidget(&Btn4);//2 slayout->setCurrentIndex(0);//设置初始要显示的按钮 setLayout(slayout); //计时器的使用 QTimer* timer = new QTimer();//1.定义对象 connect(timer, SIGNAL(timeout()), this, SLOT(outtime()));//3.连接信号与槽 timer->start(2000);//4.启动定时器 } void Widget::outtime()//2.编写槽函数 { QStackedLayout* sLayout = dynamic_cast<QStackedLayout*>(layout()); if(sLayout != NULL) { int index = (sLayout->currentIndex() + 1) % sLayout->count();//防止溢出,故取余 sLayout->setCurrentIndex(index); } } Widget::~Widget() { }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <QtGui/QApplication> #include "Widget.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }
三、小结
(1)、QStatckedLayout是栈的方式管理界面组件
(2)、QStatckedLayout中的组件最多显示一个
(3)、QStatckedLayout可以自由切换需要显示的组件
(4)、QTimer是Qt中的计时器组件
(5)、QTimer能够在指定的时间间隔触发消息