Я создаю приложение Qt, которое имеет около 30 различных представлений (QWidgets). Моя идея состоит в том, чтобы использовать QStackedWidget, чтобы облегчить переключение между различными представлениями в приложении. У меня есть два разных решения, как реализовать это и использовать как можно меньше памяти, когда пользователь перемещается по приложению.
Решение 1:
Каждый раз, когда мне нужно показать представление, я проверяю, есть ли оно в стеке. (Пользователь может открывать одно и то же представление много раз, возможно, представление, показывающее элемент из базы данных). Если представление уже находится в стеке, его не нужно создавать заново, и я могу просто показать представление.
Преимущество этого решения в том, что я повторно использую представления (виджеты), поэтому их нужно создавать только один раз. Это хорошо, поскольку пользовательский интерфейс и другие элементы должны выглядеть одинаково каждый раз, когда пользователь отображает представление, так почему бы не использовать его повторно? Проблема с этим решением состоит в том, что у каждого представления есть дети. Может быть, объект, QList с объектами или другие вещи. В Qt хорошо то, что вы можете использовать механизм parent-children, так что потомки будут удалены при удалении родителя. Поскольку я никогда не удаляю родителя (представление), я должен обработать это сам, так как дочерние элементы, возможно, должны быть удалены из разных времен, когда представление показано. (Может быть, представление отображает список с объектами, и список следует обновлять из базы данных каждый раз, когда представление отображается.)
Решение 2:
Каждый раз, когда мне нужно показать QWidget, я создаю новый и показываю его. Когда он больше не отображается, я удаляю его из памяти.
Это довольно простое решение. И когда я удаляю представления, когда они не отображаются, и представление, и его дочерние элементы должны быть удалены из памяти, чтобы это не увеличивало объем памяти, я прав?
Какое из решений вы порекомендуете?