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

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);
}

Qt窗体全屏与复原,子窗体全屏与复原_第1张图片

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();
}

Qt窗体全屏与复原,子窗体全屏与复原_第2张图片

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);
}

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

Qt窗体全屏与复原,子窗体全屏与复原_第3张图片

 

你可能感兴趣的:(QT实用笔记,qt,全屏,复原)