2013-12-11 4 views
0

Как должен член QWidget-класса нормально разрабатывать частные или публичные?Как дизайн QWidget?

class MyWidget : public QWidget { 

    public: 
     MyWidget(QWidget *parent = 0); 
     QLineEdit *myLine; 
} 

или

class MyWidget : public QWidget { 

    public: 
     MyWidget(QWidget *parent = 0); 

    private: 
     QLineEdit *myLine; 
} 

Я предпочитаю второе определение с частным элементом, но эта версия плохо, чтобы проверить, потому что у меня нет доступа к элементу с findChild (QString).

Другая часть должна включать класс QWidget в другие виджеты? Проблема в том, что прямой доступ к вложенным виджетам отсутствует, и это не очень полезно для автоматизированных тестов gui, где щелчок мышью должен быть нажат на кнопку или что-то еще.

+0

Что мешает вам добавлять функции-члены к этому классу, такие как 'QLineEdit * MyWidget :: getLineEdit() const'? – vahancho

+0

Почему я должен использовать частный модификатор с этим решением? Возможно, #define частная публика тоже, но хорошо? – Andreas

+0

'#define private public'? Это шутка? – vahancho

ответ

2

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

Как правило, тестовые среды также должны использовать API для доступа к объектам, а не для прямого доступа к элементам, поскольку именно этот API, который вы обычно хотите протестировать в рамках модульных тестов. Если вы действительно не можете отказаться от представления о том, что тестовая структура должна напрямую обращаться к закрытым членам, вы можете изучить классы друзей C++. Но ты этого не слышал от меня.

Если вам нужно получить доступ к чему-либо в общем виде (например, по имени строки), это именно то, что было сделано для вас Qt Properties. Таким образом, объявляйте свои объекты как свойство и также указывайте, как это сделать: getters/setters/signals/etc.

К сожалению, внедрение геттеров и сеттеров является довольно скучной работой, поэтому я закончил реализацию QtCreator plugin tool, который реализует геттеры, сеттеры и создает определения сигналов и испускает сигнал. Если вам когда-нибудь понадобится сделать что-то более сложное в будущем, просто удалите и замените авто-геттер/сеттер на более сложные определения.

Смежные вопросы