定时切换全屏多窗口(linux-QT5)

定时切换全屏多窗口(linux-QT5)

新建多窗口

  1. 新建一个主工程 ,类名为Widget , 基类为QWidget (主窗口)
  2. 添加新文件, 选择QT ,选择QT设计师界面类, 选择Dialog whitout Buttons (如此随便新建几个,这里我新建了两个 这里是对话窗口 或者 子窗口)

窗口全屏

  1. widget 主窗口只需要使用 showFullScreen() 函数
  2. dialog 对话窗口需要使用
    1
    2
    dialog2.setWindowFlags(Qt::Window);
    dialog2.showFullScreen();

或者

1
2
dialog2.setWindowFlags(Qt::Dialog);
dialog2.showFullScreen();

这两种方法是将窗口类型升为顶级(主)窗口模式,然后调用dialog2.showFullScreen();函数将子函数全屏显示。

  1. 感兴趣的可以看一下 关于窗口全屏显示

定时器

这里是看的QT 快速入门系列教程第十篇:
QT定时器的两种方式

关于关闭窗口相关函数

关闭应用程序和窗口的函数

具体实现

widget.h文件中

  1. 调用头文件:

    1
    2
    #include "dialog1.h"
    #include "dialog2.h" //子窗口文件名字的头文件
  2. private slots: 下添加:

    1
    2
    void dialog1Show();
    void dialog2Show();
  3. private: 下添加:

    1
    2
    3
    Dialog1 dialog1;
    Dialog2 dialog2;
    int id1 , num=0; //id1 为定时器溢出变量 ,num 为切换窗口变量
  4. 添加定时器事件函数声明:

    1
    2
    protected:
    void timerEvent(QTimerEvent *);

widget.cpp文件中

  1. 构造函数中添加:

    1
    2
    showFullScreen(); // 为了运行时就可以全屏
    id1 = startTimer(5000); // 开启一个5秒定时器,返回其ID
  2. 定义定时器事件处理函数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    void Widget::timerEvent(QTimerEvent *event)
    {
    if (event->timerId() == id1) { // 判断是哪个定时器
    if(num == 0){ // num=0 的时候调用第一个子窗口显示
    dialog1Show();
    }
    else if(num == 1){ // num=1 的时候调用第二个子窗口显示
    dialog2Show();
    }
    else if(num == 2){ //num=2 的时候关闭第二个窗口显示,设置主窗口为全屏显示,然后显示主窗口
    dialog2.close();
    showFullScreen();
    this->show();
    }
    num++;
    num %= 3; // 5秒进来一次
    }
    }
  3. 定义第一个子窗口显示函数:

    1
    2
    3
    4
    5
    6
    7
    8
    void Widget::dialog1Show(){

    this->hide();
    dialog1.setWindowFlags(Qt::Dialog);
    // dialog1.setWindowFlags(Qt::Window);
    dialog1.showFullScreen();
    dialog1.show();
    }
  4. 定义第二个子窗口显示函数

    1
    2
    3
    4
    5
    6
    7
    void Widget::dialog2Show(){
    dialog1.close();
    dialog2.setWindowFlags(Qt::Dialog);
    // dialog2.setWindowFlags(Qt::Window);
    dialog2.showFullScreen();
    dialog2.show();
    }
  • 至此整个全屏定时切换窗口程序就完成了

简化,合并函数

  • 这里是把最后这部分显示函数合并为一个函数

widget.h 中修改

1
2
private slots:
void dialogShow(char cnt);

widget.cpp中修改

  1. 定义 定时器事件处理函数如下:

    1
    2
    3
    4
    5
    6
    7
    8
    void Widget::timerEvent(QTimerEvent *event)
    {
    if (event->timerId() == id1) { // 判断是哪个定时器
    dialogShow(num);
    num++;
    num %= 3;
    }
    }
  2. 定义显示函数如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    void Widget::dialogShow(char cnt){
    if(cnt == 0){
    this->hide();
    dialog1.setWindowFlags(Qt::Dialog);
    // dialog1.setWindowFlags(Qt::Window);
    dialog1.showFullScreen();
    dialog1.show();
    }else if(cnt == 1){
    dialog1.close();
    dialog2.setWindowFlags(Qt::Dialog);
    // dialog2.setWindowFlags(Qt::Window);
    dialog2.showFullScreen();
    dialog2.show();
    }else if (cnt == 2) {
    dialog2.close();
    showFullScreen();
    this->show();
    }
    }
坚持原创技术分享,您的支持将鼓励我继续创作!