定时切换全屏多窗口(linux-QT5)
新建多窗口
- 新建一个主工程 ,类名为Widget , 基类为QWidget (主窗口)
- 添加新文件, 选择QT ,选择QT设计师界面类, 选择Dialog whitout Buttons (如此随便新建几个,这里我新建了两个 这里是对话窗口 或者 子窗口)
窗口全屏
- widget 主窗口只需要使用
showFullScreen()
函数 - dialog 对话窗口需要使用
1
2dialog2.setWindowFlags(Qt::Window);
dialog2.showFullScreen();
或者1
2dialog2.setWindowFlags(Qt::Dialog);
dialog2.showFullScreen();
这两种方法是将窗口类型升为顶级(主)窗口模式,然后调用dialog2.showFullScreen();
函数将子函数全屏显示。
- 感兴趣的可以看一下 关于窗口全屏显示
定时器
这里是看的QT 快速入门系列教程第十篇:
QT定时器的两种方式
关于关闭窗口相关函数
具体实现
widget.h
文件中
调用头文件:
1
2#include "dialog1.h"
#include "dialog2.h" //子窗口文件名字的头文件private slots:
下添加:1
2void dialog1Show();
void dialog2Show();private:
下添加:1
2
3Dialog1 dialog1;
Dialog2 dialog2;
int id1 , num=0; //id1 为定时器溢出变量 ,num 为切换窗口变量添加定时器事件函数声明:
1
2protected:
void timerEvent(QTimerEvent *);
widget.cpp
文件中
构造函数中添加:
1
2showFullScreen(); // 为了运行时就可以全屏
id1 = startTimer(5000); // 开启一个5秒定时器,返回其ID定义定时器事件处理函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18void 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秒进来一次
}
}定义第一个子窗口显示函数:
1
2
3
4
5
6
7
8void Widget::dialog1Show(){
this->hide();
dialog1.setWindowFlags(Qt::Dialog);
// dialog1.setWindowFlags(Qt::Window);
dialog1.showFullScreen();
dialog1.show();
}定义第二个子窗口显示函数
1
2
3
4
5
6
7void Widget::dialog2Show(){
dialog1.close();
dialog2.setWindowFlags(Qt::Dialog);
// dialog2.setWindowFlags(Qt::Window);
dialog2.showFullScreen();
dialog2.show();
}
- 至此整个全屏定时切换窗口程序就完成了
简化,合并函数
- 这里是把最后这部分显示函数合并为一个函数
widget.h 中修改
1 | private slots: |
widget.cpp中修改
定义 定时器事件处理函数如下:
1
2
3
4
5
6
7
8void Widget::timerEvent(QTimerEvent *event)
{
if (event->timerId() == id1) { // 判断是哪个定时器
dialogShow(num);
num++;
num %= 3;
}
}定义显示函数如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19void 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();
}
}