QWidget Geometry 保存与恢复
来源:互联网 发布:好听的网络歌曲 编辑:程序博客网 时间:2024/05/29 03:09
QWidget Geometry 保存与恢复
保存到bytearray时用 saveGeometry,从bytearray中恢复时用 restoreGeometry。
那么 saveGeometry 是究竟保存了什么?恢复时又执行了什么操作呢。
GeometryQWidget 中与获取 geometry 有关的函数有3个(manual中只介绍了前两个,而保存和恢复时用的是后两个):
- geometry
{ return data->crect; }
其中 data 是其 QWidgetData 成员
- frameGeometry
{
Q_D(const QWidget);
if (isWindow() && ! (windowType() == Qt::Popup)) {
QRect fs = d->frameStrut();
return QRect(data->crect.x() - fs.left(),
data->crect.y() - fs.top(),
data->crect.width() + fs.left() + fs.right(),
data->crect.height() + fs.top() + fs.bottom());
}
return data->crect;
}
- normalGeometry
{
Q_D(const QWidget);
if (!d->extra || !d->extra->topextra)
return QRect();
if (!isMaximized() && !isFullScreen())
return geometry();
return d->topData()->normalGeometry;
}
其中 d 是其 QWidgetPrivete 成员
3个函数中,前两个,Qt Manual中都有介绍,而第3个,文档中似乎没有涉及。
saveGeometry看看保存了什么东西
const quint32 magicNumber = 0x1D9D0CB;quint16 majorVersion = 1;
quint16 minorVersion = 0;
stream << magicNumber
<< majorVersion
<< minorVersion
<< frameGeometry()
<< normalGeometry()
<< qint32(QApplication::desktop()->screenNumber(this))
<< quint8(windowState() & Qt::WindowMaximized)
<< quint8(windowState() & Qt::WindowFullScreen);
先是魔数和版本号,然后是 frameGeometry 和 normalGeometry,接着桌面号,最后是否最大化和全屏
restoreGeometry- 首先确保在屏幕的可视区域,如不在,进行调整
- 如果是全屏或最大化:
// set geomerty before setting the window state to make
// sure the window is maximized to the right screen.
setGeometry(restoredNormalGeometry);
Qt::WindowStates ws = windowState();
if (maximized)
ws |= Qt::WindowMaximized;
if (fullScreen)
ws |= Qt::WindowFullScreen;
setWindowState(ws);
d_func()->topData()->normalGeometry = restoredNormalGeometry;
- 如不是,移动到合适位置并设置窗体大小
QPoint offset;
#ifdef Q_WS_X11
if (isFullScreen())
offset = d_func()->topData()->fullScreenOffset;
#endif
setWindowState(windowState() & ~(Qt::WindowMaximized | Qt::WindowFullScreen));
move(restoredFrameGeometry.topLeft() + offset);
resize(restoredNormalGeometry.size());
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
QByteArray data;
QDataStream stream(&data, QIODevice::WriteOnly);
stream << QMainWindowLayout::VersionMarker;
- QWidget Geometry 保存与恢复
- QWidget Geometry 保存与恢复
- QWidget rect和geometry的区别
- 环境变量的保存与恢复
- Android状态保存与恢复
- Activity : 状态保存与恢复
- cesium保存与恢复摄像机
- Activity状态的保存与恢复
- IIS6.0的配置保存与恢复
- IOS 6 UI状态保存与恢复
- IOS 6 UI状态保存与恢复
- iOS中cookie的保存与恢复
- Android基础之状态保存与恢复
- 保存与恢复activity的状态
- standupTimer项目中的状态恢复与保存
- Tensorflow中变量保存与恢复
- canvas中的状态保存与恢复
- canvas中的状态保存与恢复
- Java HashMap 核心源码解读<摘录>
- single instance to 3 node rac
- 10个最受欢迎的Java类
- opencv OpenCV访问图像像素, 数组元素等方法收集
- 最近迁移恢复中遇到的几个小问题
- QWidget Geometry 保存与恢复
- 页面声明周期
- Thread.interrupt()方法很详细的介绍
- startService 和 bindService的区别
- 练习题
- VC中文件操作的几种方式(1,2)
- 具体数学笔记(1)-Recurrent Problems
- WTL
- 图的深度优先遍历算法