Должен ли я расширять виджеты QT или использовать свои собственные классы, содержащие виджет в качестве члена? - PullRequest
3 голосов
/ 16 сентября 2011

Изучая QT (с C ++), я определяю свои собственные классы, которые не являются производными от QObjects.Даже если учебник по QT научит вас расширять свои виджеты, чтобы создавать свои собственные, я этого не делаю, потому что я думал, что мой код будет более «переносимым» и менее присущим QT (если это имеет смысл), если я переключусь на другой графическийИнструментарий.

Итак, мои классы выглядят примерно так .-

class mainWindow
{
    QVBoxLayout *winLayout;
    public:
        QWidget *winWidget;
        mainWindow();
}

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

На случай, если мне понадобятся сигналы и слоты, я создаю класс, расширяющий QObject, и использую макрос Q_OBJECT.

Но теперь мне интересно, это мое понятие (объяснено в начале) даже смутно верно?Как вы думаете, я могу столкнуться с любыми проблемами в будущем, если буду делать это по-своему, а не расширять собственные виджеты QT?Какой метод я должен придерживаться?

1 Ответ

2 голосов
/ 16 сентября 2011

Ваш класс не является правильным QWidget, но я не думаю, что это будет проблемой для Qt. Если вам не нужно получить доступ к некоторым защищенным элементам вигетов (например, взаимодействовать с событиями), вы можете обойтись без наследования виджетов qt - выбор дизайна за вами.

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

О том, чтобы быть менее "присущим Qt", я могу только сказать, что перемещение приложения из одной среды в другую обычно требует большого количества изменений, независимо от вашего дизайна, так что этот аргумент на самом деле меня не убеждает.

С другой стороны, обычно плохая идея держать открытые поля в таком классе - случайные изменения приведут к трудностям для отслеживания ошибок - подумайте о том, чтобы сделать приватный winWidget и, возможно, добавить какой-нибудь метод accesor?

Когда я начинал изучать qt, я также испытывал отвращение к подклассам QWidgets, но вскоре я понял, что просто наследовать удобнее, в основном потому, что вам не нужны тяжелые изменения в вашем классе, если однажды вам понадобится событие -взаимодействия.

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