QT获取Windows最大、最小化的状态

获取Windows的窗口属性变化、做个性化处理呢?Windows提供了QWindowStateChangeEvent事件,通过拦截改事件,我们可以做个性化处理。
一、WindowState枚举值
首先我们需要了解QT定义的Windows窗口属性,QT提供了以下几种枚举:

enum WindowState {

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

二、获取WindowState变化
QWidget自带changeEvent事件,通过改事件我们可以捕获Windows的状态WindowState变化

1,函数 Qt::WindowStates windowState() const;
返回当前窗口状态。窗口状态是 几种状态的组合
inline Qt::WindowStates oldState() const { return ostate; }
2,调用这个函数会返回Windows变化前的状态。

void MainWindow::changeEvent(QEvent *event)
{
    if(QEvent::WindowStateChange == event->type())
    {
        qDebug()<<"this->windowState()="<<this->windowState();
        QWindowStateChangeEvent * stateEvent = dynamic_cast<QWindowStateChangeEvent*>(event);
        if(Q_NULLPTR != stateEvent)
        {
            qDebug()<<"oldState="<<stateEvent->oldState();
        }

       if((this->windowState()^stateEvent->oldState())==Qt::WindowMinimized)
       {
            qDebug()<<"currentstate==Qt::WindowMinimized";
       }

        if(isMinimized())
        {

          qDebug()<<"currentstate==Qt::WindowMinimized";
      
        }

    }
}

在将界面从最大化变为最小化时,输出结果:
this->windowState()= QFlagsQt::WindowState(WindowMinimized|WindowMaximized)
oldState= QFlagsQt::WindowState(WindowMaximized)
所以想知道到底窗口从最大化变成的当前状态到底是什么就可以使用按位异或求出
另外还有更直接的得到状态的方法
bool isMinimized() const;
bool isMaximized() const;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值