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. 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() > { > > }
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest