Constantin Makshin schreef op 11.11.2013 18:33: > 1) put your 'd_ptr' into a smart pointer of some kind (usually > QScopedPointer), your example leaks memory; > 2) placing 'q_ptr' in the public section doesn't make much sense > because > it's supposed to be used only by the DisplayWidgetPrivate instance to > access its "owner" (DisplayWidget doesn't need any external information > to access itself :) ); > 3) I guess the second "public" section in DisplayWidgetPrivate was > supposed to be "private" :) . > > Other than that, your example looks OK to me. > How much sense does it make to have a private section in the private DisplayWidgetPrivate class at all? Everything in there is private for DisplayWidgets use anyway, right?
André > On 11/11/2013 06:40 PM, Graham Labdon wrote: >> Hi >> I am developing a library and in Qt Tradition I want to use the d_ptr >> pattern. >> I have no previous experience of using this pattern and have a simple >> example working but wanted to check that my implementation is correct. >> To that end I have set out my classes below and would be grateful if >> anyone could confirm that my approach is correct(or not) >> >> Thanks >> >> Header file >> >> #ifndef DISPLAYWIDGET_H >> #define DISPLAYWIDGET_H >> #include "DisplayWidgetsGlobal.h" >> #include <QWidget> >> >> class DisplayWidgetPrivate; >> >> class DISPLAYWIDGETS_EXPORT DisplayWidget : public QWidget >> { >> Q_OBJECT >> >> public: >> DisplayWidget(QWidget *parent); >> ~DisplayWidget(); >> >> private: >> DisplayWidgetPrivate* d_ptr; >> Q_DECLARE_PRIVATE(DisplayWidget) >> }; >> >> #endif // DISPLAYWIDGET_H >> >> >> Private Header file >> >> #include "DisplayWidget.h" >> >> class QLabel; >> class DisplayWidgetPrivate >> { >> public: >> DisplayWidgetPrivate (DisplayWidget* parent); >> void init(); >> >> QLabel* m_label; >> DisplayWidget* const q_ptr; >> Q_DECLARE_PUBLIC(DisplayWidget) >> >> public: >> DisplayWidgetPrivate(); >> }; >> >> >> Implementation file >> >> #include <QLabel> >> #include "DisplayWidget.h" >> #include "DisplayWidget_p.h" >> >> DisplayWidgetPrivate::DisplayWidgetPrivate(DisplayWidget* parent) >> : q_ptr(parent) >> { >> >> } >> >> void DisplayWidgetPrivate::init() >> { >> m_label = new QLabel("This is a label",q_ptr); >> } >> >> DisplayWidget::DisplayWidget(QWidget *parent) >> : QWidget(parent), >> d_ptr(new DisplayWidgetPrivate(this)) >> { >> Q_D(DisplayWidget); >> d->init(); >> } >> >> DisplayWidget::~DisplayWidget() >> { >> >> } > > > _______________________________________________ > Interest mailing list > Interest@qt-project.org > http://lists.qt-project.org/mailman/listinfo/interest _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest