zoukankan      html  css  js  c++  java
  • 第二十五课、布局管理器(四)------------------狄泰软件学院

    一、栈式布局管理器

    1、栈式布局管理器(QStatckedLayout)概要

    (1)、所有组件垂直于屏幕的方向上被管理

    (2)、每次只有一个组件会显示在屏幕上

    (3)、只有最顶层的组件会被最终显示

    2、栈式布局管理器的特点

    (1)、组件大小一致且充满父组件的显示区

    (2)、不能直接嵌套其它布局管理器(可以依赖中间组件间接嵌套

    (3)、能够自由切换需要显示的组件

    (4)、每次能且仅能显示一个组件

    3、QStatckedLayout的用法概要

    二、计时器

    1、计时器的概念

    (1)、计时器是工程开发中非常重要的概念

    (2)、计时器用于每隔一定的时间触发一个消息

    (3)、计时器消息最终会被转化为函数调用

    (4)、宏观上:计时器在每隔时间间隔会调用指定的函数

    2、计时器(QTimer)的使用方法

    (1)、编写计时器消息处理函数

    (2)、在程序中创建计时器对象

    (3)、连接计时器消息和消息处理函数

    (4)、设置计时器时间间隔并启动计时

    #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
    Widget.h
    #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()
    {
        
    }
    Widget.cpp
    #include <QtGui/QApplication>
    #include "Widget.h"
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        Widget w;
        w.show();
        
        return a.exec();
    }
    main.cpp

    三、小结

    (1)、QStatckedLayout是栈的方式管理界面组件

    (2)、QStatckedLayout中的组件最多显示一个

    (3)、QStatckedLayout可以自由切换需要显示的组件

    (4)、QTimer是Qt中的计时器组件

    (5)、QTimer能够在指定的时间间隔触发消息

  • 相关阅读:
    关于同余最短路
    【水】关于 __attribute__
    题解【AtCoder
    一些简单图论问题
    浅谈简单动态规划
    关于博客园主题(美化博客园)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第47章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第46章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第45章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第44章 读书笔记(待更新)
  • 原文地址:https://www.cnblogs.com/gui-lin/p/6404261.html
Copyright © 2011-2022 走看看