我正在尝试恢复 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/