Qt: QStackedWidget решение - PullRequest
       3

Qt: QStackedWidget решение

0 голосов
/ 14 апреля 2010

Я создаю приложение Qt, которое имеет около 30 различных представлений (QWidgets). Моя идея состоит в том, чтобы использовать QStackedWidget, чтобы облегчить переключение между различными представлениями в приложении. У меня есть два разных решения, как реализовать это и использовать как можно меньше памяти, когда пользователь перемещается по приложению.

Решение 1: Каждый раз, когда мне нужно показать представление, я проверяю, есть ли оно в стеке. (Пользователь может открывать одно и то же представление много раз, возможно, представление, показывающее элемент из базы данных). Если представление уже находится в стеке, его не нужно создавать заново, и я могу просто показать представление.

Преимущество этого решения в том, что я повторно использую представления (виджеты), поэтому их нужно создавать только один раз. Это хорошо, поскольку пользовательский интерфейс и другие элементы должны выглядеть одинаково каждый раз, когда пользователь отображает представление, так почему бы не использовать его повторно? Проблема с этим решением состоит в том, что у каждого представления есть дети. Может быть, объект, QList с объектами или другие вещи. В Qt хорошо то, что вы можете использовать механизм parent-children, так что потомки будут удалены при удалении родителя. Поскольку я никогда не удаляю родителя (представление), я должен обработать это сам, так как дочерние элементы, возможно, должны быть удалены из разных времен, когда представление показано. (Может быть, представление отображает список с объектами, и список следует обновлять из базы данных каждый раз, когда представление отображается.)

Решение 2: Каждый раз, когда мне нужно показать QWidget, я создаю новый и показываю его. Когда он больше не отображается, я удаляю его из памяти.

Это довольно простое решение. И когда я удаляю представления, когда они не отображаются, и представление, и его дочерние элементы должны быть удалены из памяти, чтобы это не увеличивало объем памяти, я прав?

Какое из решений вы порекомендуете?

1 Ответ

2 голосов
/ 14 апреля 2010

Если объем памяти настолько ограничен, что , то, вероятно, было бы лучше всего просто создать экземпляр и удалить при необходимости.

Если вы следуете архитектуре типа MVC, ваша модель данных должна отличаться от ваших представлений, поэтому классы QWidget не должны сохранять ссылки на модель данных, когда они не используются. То есть, когда ваш класс QWidget больше не нужен, вы можете сохранить его экземпляр, но «обнулить» ссылки на модель данных (которая, как я предполагаю, управляет собственной памятью).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...