关键词:QStackedLayout
栈式布局管理器、计时器、 Qt中的计时器QTimer
使用方法
1. QStackedLayout
栈式布局管理器
-
所有组件在垂直于屏幕的方向上被管理,每次只有一个组件会显示在屏幕上,只有最顶层的组件会被最终显示
QStackedLayout
的特点
1) 组件大小一致且充满父组件的显示区
2) 不能直接嵌套其它布局管理器
3) 能够自由切换需要显示的组件
4) 每次能且仅能显示一个组件QStackedLayout
的使用方法
void Widget::testStackedLayout()
{
QStackedLayout* layout = new QStackedLayout();
TestBtn1.setText("1st Button");
TestBtn2.setText("2rd Button");
TestBtn3.setText("3th Button");
TestBtn4.setText("last Button");
layout->addWidget(&TestBtn1);
layout->addWidget(&TestBtn2);
layout->addWidget(&TestBtn3);
layout->addWidget(&TestBtn4);
layout->setCurrentIndex(1);
setLayout(layout);
}
-
QStackedLayout
的间接嵌套
void Widget::testStackedLayout()
{
QStackedLayout* layout = new QStackedLayout();
QHBoxLayout* hLayout = new QHBoxLayout();
QWidget* widget = new QWidget(); // 创建一个辅助的widget对象
TestBtn1.setText("1st Button");
TestBtn2.setText("2rd Button");
TestBtn3.setText("3th Button");
TestBtn4.setText("last Button");
TestBtn2.setParent(widget); // 将widget对象设置为TestBtn2的父组件
TestBtn3.setParent(widget); // 将widget对象设置为TestBtn3的父组件
hLayout->addWidget(&TestBtn2); // 水平布局管理TestBtn2和TestBtn3
hLayout->addWidget(&TestBtn3);
widget->setLayout(hLayout); // 将水平布局管理设置到widget对象上
layout->addWidget(&TestBtn1);
layout->addWidget(widget);
layout->addWidget(&TestBtn4);
layout->setCurrentIndex(1);
setLayout(layout);
}
2. 计时器的概念
- 计时器用于每隔一定的时间出发一个消息
- 计时器消息最终会被转化为函数调用
- 宏观上,计时器在每个时间间隔会调用指定的函数
3. Qt中的计时器QTimer
使用方法
1) 编写计时器消息处理函数
2) 在程序中创建计时器对象
3) 连接计时器消息和消息处理函数
4) 设置计时器时间间隔并启动计时
void Widget::testStackedLayout()
{
QStackedLayout* layout = new QStackedLayout();
QHBoxLayout* hLayout = new QHBoxLayout();
QWidget* widget = new QWidget();
QTimer* timer = new QTimer(this); // 2.创建计时器对象
TestBtn1.setText("1st Button");
TestBtn2.setText("2rd Button");
TestBtn3.setText("3th Button");
TestBtn4.setText("last Button");
TestBtn2.setParent(widget);
TestBtn3.setParent(widget);
hLayout->addWidget(&TestBtn2);
hLayout->addWidget(&TestBtn3);
widget->setLayout(hLayout);
layout->addWidget(&TestBtn1);
layout->addWidget(widget);
layout->addWidget(&TestBtn4);
layout->setCurrentIndex(0);
setLayout(layout);
connect(timer, SIGNAL(timeout()), this, SLOT(timerTimeout())); // 3.连接计时器消息和消息处理函数
timer->start(2000); // 4. 设置计时器时间间隔并启动计时
}
void Widget::timerTimeout() // 1.编写计时器消息处理函数
{
QStackedLayout* sLayout = dynamic_cast<QStackedLayout*>(layout());
if( sLayout != NULL )
{
int index = (sLayout->currentIndex() + 1) % sLayout->count();
sLayout->setCurrentIndex(index);
}
}
4. 小结
-
QStackedLayout
以栈的方式管理界面组件 -
QStackedLayout
中的组件最多只有一个显示 -
QStackedLayout
可以自由切换需要显示的组件 -
QTimer
是Qt中的计时器组件 -
QTimer
能够在指定的时间间隔触发消息
声明:此文章仅是本人在学习狄泰QT实验分析课程所做的笔记,文章中包含狄泰软件资料内容,一切版权归狄泰软件所有!
实验环境:ubuntu10 + Qt Creator2.4.1 + Qt SDK 4.7.4