Qt:恢复 QTextEdit 的几何图形失败

Qt: Restoring the geometry of QTextEdit fails

本文关键字:几何图形 失败 QTextEdit 恢复 Qt      更新时间:2023-10-16

我正在尝试恢复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(x1xd9xd0xcbx1ax80v-x2xf1ax83x17v*x2xedx2)
main_window_state=@ByteArray(xffxfdx3xa8x2xaax4x4bbxfcx1x2x1x16mx61inToolx42x61rx1xffxffxffxff)
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=

然后我缩小文本编辑(在 ini 中标识为 lineinput)并关闭。生成的 INI 值如下:

[General]
main_interface=@ByteArray(x1xd9xd0xcbx1ax80v-x2xf1ax83x17v*x2xedx2)
main_window_state=@ByteArray(xffxfdx3xa8x2xaax4x4bbxfcx1x2x1x16mx61inToolx42x61rx1xffxffxffxff)
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=

我可以看到行输入的高度从 328 更改为 76,但是当我再次打开应用程序时,大小并没有减小。再次保存它将再次保存 328。

谁能告诉我发生了什么?

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