QT获取Windows最大、最小化信号——QWindowStateChangeEvent

前言

Windows的窗口属性包含:最小、最大、正常模式,一般创建项目,如果不使用setWindowFlags函数取消最大最小按钮,那么右上角会自动包含最大、最小按钮,点击按钮可以最大最小窗口。并且点击状态栏上的图标,可以最大最小化窗口。那么如何获取Windows的窗口属性变化、做个性化处理呢?Windows提供了QWindowStateChangeEvent事件,通过拦截改事件,我们可以做个性化处理。

一、WindowState枚举值

首先我们需要了解QT定义的Windows窗口属性,QT提供了以下几种枚举:

    enum WindowState {
        WindowNoState    = 0x00000000,
        WindowMinimized  = 0x00000001,
        WindowMaximized  = 0x00000002,
        WindowFullScreen = 0x00000004,
        WindowActive     = 0x00000008
    };

在代码中可以使用例如:Qt::WindowMinimized去调用。
WindowNoState 就是正常模式,也就是常用的窗口模式,如果不最大化窗口,那么窗口模式就是WindowNoState。注意:如果你的窗口最大最小是自己实现的(例如设置最大最小size)而不是用QT自带的按钮,那么你的窗口属性恒定为WindowNoState。
WindowMinimized 窗口最小化模式(点击状态栏图标和最小化按钮)
WindowMaximized 窗口最大化模式(点击状态栏图标和最大化按钮)
WindowFullScreen 全屏模式(类似看视频点击的全屏模式,如果不做双击出现标题栏等特殊处理,标题栏和电脑状态栏都看不到)
WindowActive 窗口活动模式(即活动窗口,可以使用键盘输入等)

二、获取WindowState变化

QWidget自带changeEvent事件,通过改事件我们可以捕获Windows的状态变化,代码如下:

void MainWindow::changeEvent(QEvent *event)
{
    if(QEvent::WindowStateChange == event->type()){
        QWindowStateChangeEvent * stateEvent = dynamic_cast<QWindowStateChangeEvent*>(event);
        if(Q_NULLPTR != stateEvent){
            Qt::WindowStates x = stateEvent->oldState();
            qDebug() << "123123" << stateEvent->oldState() << x;
            if(Qt::WindowMinimized == stateEvent->oldState()){
                qDebug() << "maxmax";
            }
            else if(Qt::WindowMaximized == stateEvent->oldState()){
                qDebug() << "minmin";
            }
        }
    }
}

最主要的函数就是QWindowStateChangeEvent的oldState(),调用这个函数会返回Windows变化前的状态,通过改状态的改变,我们可以对最大、最小等变化做出相应的调整

原文链接:https://blog.csdn.net/sunatmine/article/details/117426362

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Mac 端使用 Qt 开发应用程序时,关闭、最大化和最小化按钮的样式与 Windows 平台有所不同。如果想要自定义这些按钮的显示和行为,可以通过设置样式表和重写窗口事件的方式来实现。 首先,可以通过样式表设置关闭、最大化和最小化按钮的图标和位置。例如,下面的样式表将关闭按钮设置在窗口右上角: ``` QMainWindow::closeButton { image: url(close.png); subcontrol-origin: margin; subcontrol-position: top right; margin: 4px; } ``` 然后,在窗口类中重写 QWidget::nativeEvent() 函数来处理系统事件。例如,可以拦截 QEvent::WindowCloseButtonHintChanged 事件,以修改关闭按钮的行为: ``` bool MyWindow::nativeEvent(const QByteArray &eventType, void *message, long *result) { if (eventType == "com.apple.HIToolbox.events" && result) { HIEvent *event = static_cast<HIEvent *>(message); if (event->what == kEventWindowCloseButtonHit) { // Do something when close button clicked *result = 0; return true; } } return QMainWindow::nativeEvent(eventType, message, result); } ``` 在处理关闭按钮点击事件时,可以执行自定义的关闭操作,并将结果返回到 result 中。类似地,在处理最大化和最小化按钮事件时,可以使用 QEvent::WindowMaximizeButtonHintChanged 和 QEvent::WindowMinimizeButtonHintChanged 事件。需要注意的是,这种方式只适用于 Mac 平台,不能在其他平台上使用。 总之,通过设置样式表和重写窗口事件,可以自定义 Qt 应用程序在 Mac 平台上的关闭、最大化和最小化按钮的显示和行为。这种方式可以增强用户体验,让应用程序更加个性化和易用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值