c++ - Qt:恢复 QTextEdit 的几何形状失败

标签 c++ qt

我正在尝试恢复 TabWidget、ListView 和 TextEdit 的几何形状(主要是尺寸)。所有这些都是用 QtDesginer 设计的,所以我没有写任何代码。 TabWidget 和 ListView “在水平布局中与拆分器组合在一起”,结果组“在垂直布局中与拆分器组合在一起”,文本编辑在底部。该组设置在主窗口的网格布局中。

我像这样在窗口构造函数中加载设置:

   restoreGeometry(settings.value("main_interface").toByteArray());
   restoreState(settings.value("main_window_state").toByteArray());
   ui->twConversations->setGeometry(settings.value("conversations").toRect());
   ui->lvContacts->setGeometry(settings.value("contacts").toRect());
   ui->teUserInput->setGeometry(settings.value("lineinput").toRect());
   ui->spEditRest->setGeometry(settings.value("vertical_space").toRect());
   userID = settings.value("user_id").toString();
   doesUserExist = !userID.isEmpty();

您可以看到,我什至尝试保存分离器几何图形以查看它是否有所不同。它没有。

窗口关闭时调用保存设置函数,代码如下:

QSettings settings(SETTINGS_FILE,QSettings::IniFormat);
settings.setValue("main_interface",this->saveGeometry());
settings.setValue("main_window_state",this->saveState());
settings.setValue("conversations",ui->twConversations->geometry());
settings.setValue("contacts",ui->lvContacts->geometry());
settings.setValue("lineinput",ui->teUserInput->geometry());
settings.setValue("vertical_space",ui->spEditRest->geometry());
settings.setValue("user_id",userID);

当 INI 不存在时,将使用这些值创建它:

[General]
main_interface=@ByteArray(\x1\xd9\xd0\xcb\0\x1\0\0\0\0\a\x80\0\0\0\0\0\0\v-\0\0\x2\xf1\0\0\a\x83\0\0\0\x17\0\0\v*\0\0\x2\xed\0\0\0\x2\0\0)
main_window_state=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\0\0\0\x3\xa8\0\0\x2\xaa\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x1\0\0\0\x16\0m\0\x61\0i\0n\0T\0o\0o\0l\0\x42\0\x61\0r\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0)
conversations=@Rect(0 0 206 329)
contacts=@Rect(209 0 705 329)
lineinput=@Rect(0 332 914 328)
vertical_space=@Rect(11 11 914 660)
user_id=

然后我缩小 textedit(在 ini 中标识为 lineinput)并关闭。生成的 INI 值是这样的:

[General]
main_interface=@ByteArray(\x1\xd9\xd0\xcb\0\x1\0\0\0\0\a\x80\0\0\0\0\0\0\v-\0\0\x2\xf1\0\0\a\x83\0\0\0\x17\0\0\v*\0\0\x2\xed\0\0\0\x2\0\0)
main_window_state=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\0\0\0\x3\xa8\0\0\x2\xaa\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x1\0\0\0\x16\0m\0\x61\0i\0n\0T\0o\0o\0l\0\x42\0\x61\0r\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0)
conversations=@Rect(0 0 206 581)
contacts=@Rect(209 0 705 581)
lineinput=@Rect(0 584 914 76)
vertical_space=@Rect(11 11 914 660)
user_id=

我可以看到 lineinput 的高度从 328 变为 76,但是当我再次打开应用程序时,尺寸并没有减小。再次保存将再次节省 328。

谁能告诉我这是怎么回事?

最佳答案

调整布局内的小部件的大小不是一个好主意,因为布局管理它的大小。您可以恢复主窗口的几何形状,还可以恢复分离器的状态(saveState()restoreState())(不是分离器的几何形状)

关于c++ - Qt:恢复 QTextEdit 的几何形状失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35773672/

相关文章:

c++ - CMake:将依赖项添加到 IMPORTED 库

c++ - 如何使用 zlib 压缩缓冲区?

html - QT html和CSS转pdf文件

c++ - 操纵 QGradient 以遵循路径

android - 适用于 Android 的 Qt BLE : Cannot read value of characteristic for Custom Service

c++ - C++ 中的 cin.get() 有问题吗?

c++ - Const 静态方法修改值

c# - 具有共享区域/内存的 C++ 应用程序和 C# 应用程序

qt - 多次迭代后不断生成 QPixmap* 失败

qt - 在布局上动态创建项目,在 QSpin Clicked 上 - 删除不会删除项目