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

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

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

 

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值