QWidget Geometry 保存与恢复

2024-05-03 05:08
文章标签 恢复 保存 geometry qwidget

本文主要是介绍QWidget Geometry 保存与恢复,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

QWidget Geometry 保存与恢复

保存到bytearray时用 saveGeometry,从bytearray中恢复时用 restoreGeometry。

那么 saveGeometry 是究竟保存了什么?恢复时又执行了什么操作呢。

Geometry

QWidget 中与获取 geometry 有关的函数有3个(manual中只介绍了前两个,而保存和恢复时用的是后两个):

  • geometry
inline const QRect &QWidget::geometry() const 
{ return data->crect; }

其中 data 是其 QWidgetData 成员

  • frameGeometry
QRect QWidget::frameGeometry() const 
{
 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
QRect QWidget::normalGeometry() const 
{
 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
  • 首先确保在屏幕的可视区域,如不在,进行调整
  • 如果是全屏或最大化:
if (maximized || fullScreen) {
 // 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;
  • 如不是,移动到合适位置并设置窗体大小
} else {
 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 保存与恢复的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/955894

相关文章

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

如何恢复回收站中已删除/清空的文件

回收站清空后如何恢复已删除的文件?是否可以恢复永久删除的文件?或者最糟糕的是,如果文件直接被删除怎么办?本文将向您展示清空回收站后恢复已删除数据的最佳方法。 回收站清空后如何恢复已删除的文件? “回收站清空后我还能恢复已删除的文件吗?” 答案是肯定的,但是在这种情况下您将需要一个  回收站恢复工具 来从回收站中检索文件: 错误/永久删除回收站或任何数字存储设备中的文件 直接删除的文件/

下载/保存/读取 文件,并转成流输出

最近对文件的操作又熟悉了下;现在记载下来:学习在于 坚持!!!不以细小而不为。 实现的是:文件的下载、文件的保存到SD卡、文件的读取输出String 类型、最后是文件转换成流输出;一整套够用了; 重点: 1:   操作网络要记得开线程; 2:更新网络获取的数据 切记用Handler机制; 3:注意代码的可读性(这里面只是保存到SD卡,在项目中切记要对SD卡的有无做判断,然后再获取路径!)

FFmpeg系列-视频解码后保存帧图片为ppm

在正常开发中遇到花屏时怎么处理呢?可以把解码后的数据直接保存成帧图片保存起来,然后直接看图片有没有花屏来排除是否是显示的问题,如果花屏,则代表显示无问题,如果图片中没有花屏,则可以往显示的方向去排查了。 void saveFrame(AVFrame* pFrame, int width, int height, int iFrame){FILE *pFile;char szFilename[

海鸥相机存储卡格式化如何恢复数据

在摄影的世界里,‌每一张照片都承载着独特的记忆与故事。‌然而,‌当我们不慎将海鸥相机的存储卡格式化后,‌那些珍贵的瞬间似乎瞬间消逝,‌让人心急如焚。‌但请不要绝望,‌数据恢复并非遥不可及。‌本文将详细介绍在海鸥相机存储卡格式化后,‌如何高效地恢复丢失的数据,‌帮助您重新找回那些宝贵的记忆。‌ 图片来源于网络,如有侵权请告知 一、‌回忆备份情况 ‌海鸥相机存储卡格式化如何恢复数据?在意

想要从OPPO手机恢复数据?免费OPPO照片视频恢复软件

此实用程序可帮助那些寻找以下内容的用户: 在OPPO手机中格式化存储卡后可以恢复图片吗?我删除了 OPPO上的视频和图片,我感觉很糟糕,因为里面有我在拉斯维加斯拍摄的视频和照片 免费OPPO照片视频恢复软件 您能恢复OPPO上已删除的照片吗?我不小心格式化了OPPO SD 卡,有希望恢复已删除的照片吗? 救命!我在清理时删除了我的照片,我的问题是是否有任何免费软件可以从OPPO中恢复已

html记账本改写:数据重新布局,更好用了,没有localStorage保存版本

<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><title>htm记账本</title><style>table {user-select: none;/* width: 100%; */border-collapse: collapse;}table,th,td {border: 1px solid bla

在项目中,控制权限保存时,如果多次修改权限,该如何写?

在项目中,控制权限保存时,如果多次修改权限,该如何写? 错误代码: package cn.itcast.crm.service.impl;import java.util.List;import javax.annotation.Resource;import org.apache.commons.lang.xwork.StringUtils;import org.springfr

Oracle Data Guard:Oracle数据库的高可用性和灾难恢复解决方案

在企业级数据库管理中,确保数据的高可用性和在灾难情况下的快速恢复是至关重要的。Oracle Data Guard是Oracle公司提供的一种强大的数据库高可用性解决方案,它通过在主数据库和至少一个备用数据库之间提供实时或近实时的数据保护来实现这一目标。本文将详细介绍如何在Oracle数据库中部署和使用Oracle Data Guard,包括其基本概念、配置步骤、管理技巧和实际应用示例。 1. O