前言
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