获取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;