当前位置:   article > 正文

Qt窗体全屏与复原,子窗体全屏与复原_qwidget全屏

qwidget全屏

QT QWidget窗体全屏时,全屏与最大化的区别时最大化有标题框全屏没有框,可以使用自带的函数:

showFullScreen();

复原时也有专门的函数:

showNormal();

1. 点击窗体最大化按钮实现全屏,按下ESC实现复原

如果我想在点击最大化按钮时,让窗体全屏。这个时候最好有线程的信号或者函数,通过它们来调用showFullScreen(),可惜现在没有这样的函数,只能靠以下方法:

  1. void Widget::changeEvent(QEvent *event)
  2. {
  3. if (event->type() == QEvent::WindowStateChange)
  4. {
  5. if (this->windowState() == Qt::WindowMaximized)
  6. {
  7. this->showFullScreen();
  8. }
  9. }
  10. QWidget::changeEvent(event);
  11. }

QWidget有个专门的函数changeEvent来监测事件变化,当窗体状态变化时会发送QEvent::WindowStateChange,它的描述如下:

The window's state (minimized, maximized or full-screen) has changed (QWindowStateChangeEvent).

包括最大最小与全屏事件。

然后我们再判断窗体的状态是否是最大化,是的话就调用showFullScreen()全屏函数。

同理,检测最小化事件也可以采用这种方法。

复原时,按下ESC。复原代码:

  1. void Widget::keyPressEvent(QKeyEvent *event)
  2. {
  3. if (event->key() == Qt::Key_Escape)
  4. {
  5. showNormal();
  6. }
  7. QWidget::keyPressEvent(event);
  8. }

2. 按下自定义按钮实现全屏,按下自定义按钮复原

修改一下,写两个槽直接调用最大化与复原函数。

  1. connect(ui->MaxButton, SIGNAL(clicked()), this, SLOT(slotMax()));
  2. connect(ui->NormalButton, SIGNAL(clicked()), this, SLOT(slotNormal()));
  3. void Widget::slotMax()
  4. {
  5. showFullScreen();
  6. }
  7. void Widget::slotNormal()
  8. {
  9. showNormal();
  10. }

3. 按下自定义按钮实现子窗体全屏,按下自定义按钮复原

这个比较有用,比如内部视频窗体要全屏。修改代码如下:

  1. void Widget::slotMax()
  2. {
  3. m_rect = ui->widget->geometry();
  4. ui->widget->setWindowFlags(Qt::Window|Qt::WindowStaysOnTopHint|Qt::FramelessWindowHint);
  5. ui->widget->setFocus();
  6. ui->widget->showFullScreen();
  7. }
  8. void Widget::slotNormal()
  9. {
  10. ui->widget->setWindowFlags(Qt::WindowTitleHint|Qt::WindowSystemMenuHint|Qt::WindowMinMaxButtonsHint|Qt::WindowCloseButtonHint);
  11. ui->widget->showNormal();
  12. ui->widget->setGeometry(m_rect);
  13. }

在全屏之前记录一下内部子窗体的位置大小,复原时候用得上。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/95050
推荐阅读
相关标签
  

闽ICP备14008679号