QWidget Geometry 保存与恢复
来源:互联网 发布:dem地球软件 编辑:程序博客网 时间:2024/06/10 21:00
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;
0 0
- 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中的状态保存与恢复
- 给所有想当程序员的朋友
- Jaxb例子
- [ZOJ 3810 A Volcanic Island] 构造+调整
- uva 11054(贪心)
- iPhone之为UIView设置阴影(CALayer的shadowColor,shadowOffset,shadowOpacity,shadowRadius,shadowPath属性)
- QWidget Geometry 保存与恢复
- iPhone之Quartz 2D系列--变换(5)Transforms
- iPhone之Quartz 2D系列--路径(3)Paths
- [ZOJ 3813 Alternating Sum] 线段树 树状数组
- linux学习笔记(3)
- Iphone之选择图片滤镜功能的实现
- android的测试工具
- quick-cocos2d-x游戏开发【13】——节点生命周期事件,帧事件等其他事件
- 进程同步(读写共享内存)