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);
}
在全屏之前记录一下内部子窗体的位置大小,复原时候用得上。
文章来源:https://www.toymoban.com/news/detail-547166.html
文章来源地址https://www.toymoban.com/news/detail-547166.html
到了这里,关于Qt窗体全屏与复原,子窗体全屏与复原的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!