我正在尝试还原TabWidget,ListView和TextEdit的几何形状(主要是大小)。所有这些都是使用QtDesginer设计的,因此我没有编写任何代码。 TabWidget和ListView的位置是“用分隔线在水平布局中分组在一起”,结果组是“用分隔线在垂直布局中分组在一起”,底部是textedit。该组在主窗口上以网格布局设置。

我将设置加载到窗口构造函数中,如下所示:

   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())(不是拆分器的几何图形)

09-06 14:02