赞
踩
QT QWidget窗体全屏时,全屏与最大化的区别时最大化有标题框全屏没有框,可以使用自带的函数:
showFullScreen();
复原时也有专门的函数:
showNormal();
1. 点击窗体最大化按钮实现全屏,按下ESC实现复原
如果我想在点击最大化按钮时,让窗体全屏。这个时候最好有线程的信号或者函数,通过它们来调用showFullScreen(),可惜现在没有这样的函数,只能靠以下方法:
- void Widget::changeEvent(QEvent *event)
- {
- if (event->type() == QEvent::WindowStateChange)
- {
- if (this->windowState() == Qt::WindowMaximized)
- {
- this->showFullScreen();
- }
- }
- QWidget::changeEvent(event);
- }
QWidget有个专门的函数changeEvent来监测事件变化,当窗体状态变化时会发送QEvent::WindowStateChange,它的描述如下:
The window's state (minimized, maximized or full-screen) has changed (QWindowStateChangeEvent).
包括最大最小与全屏事件。
然后我们再判断窗体的状态是否是最大化,是的话就调用showFullScreen()全屏函数。
同理,检测最小化事件也可以采用这种方法。
复原时,按下ESC。复原代码:
- void Widget::keyPressEvent(QKeyEvent *event)
- {
- if (event->key() == Qt::Key_Escape)
- {
- showNormal();
- }
- QWidget::keyPressEvent(event);
- }
2. 按下自定义按钮实现全屏,按下自定义按钮复原
修改一下,写两个槽直接调用最大化与复原函数。
- connect(ui->MaxButton, SIGNAL(clicked()), this, SLOT(slotMax()));
- connect(ui->NormalButton, SIGNAL(clicked()), this, SLOT(slotNormal()));
-
- void Widget::slotMax()
- {
- showFullScreen();
- }
-
- void Widget::slotNormal()
- {
- showNormal();
- }
3. 按下自定义按钮实现子窗体全屏,按下自定义按钮复原
这个比较有用,比如内部视频窗体要全屏。修改代码如下:
- void Widget::slotMax()
- {
- m_rect = ui->widget->geometry();
- ui->widget->setWindowFlags(Qt::Window|Qt::WindowStaysOnTopHint|Qt::FramelessWindowHint);
-
- ui->widget->setFocus();
- ui->widget->showFullScreen();
- }
-
- void Widget::slotNormal()
- {
-
- ui->widget->setWindowFlags(Qt::WindowTitleHint|Qt::WindowSystemMenuHint|Qt::WindowMinMaxButtonsHint|Qt::WindowCloseButtonHint);
- ui->widget->showNormal();
- ui->widget->setGeometry(m_rect);
- }
在全屏之前记录一下内部子窗体的位置大小,复原时候用得上。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。