Right, but: 1) classes derived from DisplayWidget may want to derive their *Private counterparts from DisplayWidgetPrivate — in this case private section will make DisplayWidgetPrivate's internals accessible only to this class itself and its friend DisplayWidget; 2) since not all compilers support "= delete" from C++11, placing an intentionally-unimplemented constructor[s] and/or assignment operator into the private section is the most common way to mark them as unavailable.
On 11/11/2013 10:22 PM, an...@familiesomers.nl wrote: > 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() >>> { >>> >>> }
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest