Qt 归档体系结构的设置
我的Qt应用程序使用了很多单窗口qwidget,屏幕上没有父窗口。由于用户不再需要特定的窗口,为了将来的使用,他可能会将它们放入存档中,这样它们就不会再出现在屏幕上。如果用户在包含窗口名称的列表中打开存档,如果他单击某个条目,则窗口应重新显示。 我的问题是关于性能:在归档/应用程序启动时,是否每个窗口都应该创建一次,然后隐藏起来,以便在请求时重新显示,还是每个窗口都应该仅作为一个序列化字符串存在于内部列表中,在请求时始终从中重新创建窗口?重新创建有点慢,但考虑到台式计算机的速度,我不介意。这在手持设备上可能有所不同。此外,我想知道,如果有数千个隐藏窗口,每个窗口都有按钮、滑块、文本浏览器和所有gui东西,那么Qt中是否会占用大量内存Qt 归档体系结构的设置,qt,memory-management,Qt,Memory Management,我的Qt应用程序使用了很多单窗口qwidget,屏幕上没有父窗口。由于用户不再需要特定的窗口,为了将来的使用,他可能会将它们放入存档中,这样它们就不会再出现在屏幕上。如果用户在包含窗口名称的列表中打开存档,如果他单击某个条目,则窗口应重新显示。 我的问题是关于性能:在归档/应用程序启动时,是否每个窗口都应该创建一次,然后隐藏起来,以便在请求时重新显示,还是每个窗口都应该仅作为一个序列化字符串存在于内部列表中,在请求时始终从中重新创建窗口?重新创建有点慢,但考虑到台式计算机的速度,我不介意。这在手
在阅读有关windows的文章时,似乎windows并没有占用太多内存,所以我倾向于创建所有windows,而只是隐藏它们。这是一种好方法吗?隐藏的小部件仍在侦听事件并存在于内存中,这意味着太多的小部件对应用程序性能没有好处。我会为这些小部件创建通用的可序列化基础,并将它们流式传输到数据容器,例如,vector Easter on memory或file可以在不使用时刷新到磁盘,但预期会重新启动。Qt类型非常方便 所需架构的蓝图:
class QWidgetS : public QWidget
{
// ...
public:
template <typename T> static T* showDeserialize(QDataStream& strm)
{
T* pWidget = new T(); // create QWidgetS-based object
pWidget->deserialize(strm); // restore object data
pWidget->show(); // show the widget
return pWidget; // return the pointer to widget
}
virtual void serialize(QDataStream& strm); // need to implement
virtual void deserialize(QDataStream& strm); // individual child classes
// ...
};
/// sample serialization
void MyWidgetS::serialize(QDataStream& strm)
{
strm << this->var1 << this->var2;
}
/// sample deserialization
void MyWidgetS::deserialize(QDataStream& strm)
{
strm >> this->var1 >> this->var2;
}
是的,但为什么QWidgets没有父对象?我想用鼠标在桌面上移动它们。首先,争取按需创建windows。其次,只存储足以重新创建窗口的信息。