2014-01-15 3 views
0

Я пытаюсь создать настраиваемый элемент управления, но с ограниченными знаниями на C++. Я немного борюсь.Расширение элемента управления при создании пользовательского элемента управления в C++

Я просмотрел файл заголовка RadioGroup.h, поскольку я пытаюсь создать что-то с аналогичной функциональностью.

Вот мои 2 файла:

CompanyRadioGroup.h

#ifndef COMPANYRADIOGROUP_H_ 
#define COMPANYRADIOGROUP_H_ 

#include <bb/cascades/Control> 
#include <bb/cascades/Container> 
#include <bb/cascades/Option> 

using namespace bb::cascades; 

class CompanyRadioGroup : public Control { 
private: 
Q_OBJECT 
QDeclarativeListProperty<Option> options(); 

public: 
CompanyRadioGroup(Container * parent = 0); 
virtual ~CompanyRadioGroup(); 

template <typename BuilderType, typename BuiltType> 
class TBuilder : public BaseClass::TBuilder<BuilderType, BuiltType> 
     { 
     protected: 
      TBuilder(BuiltType* node) : BaseClass::TBuilder<BuilderType, BuiltType>(node) 
      { 
      } 
     public: 

      /*! 
      * @copydoc bb::cascades::RadioGroup::setDividersVisible(bool) 
      * 
      * @since BlackBerry 10.0.0 
      */ 
      BuilderType& dividers(bool dividersVisible) 
      { 
       this->instance().setDividersVisible(dividersVisible); 
       return this->builder(); 
      } 

      BuilderType& add(Option* option) 
      { 
       this->instance().add(option); 
       return this->builder(); 
      } 

      BuilderType& add(const QString &optionText, const QVariant &value = QVariant(), bool selected = false) 
      { 
       this->instance().add(Option::create().text(optionText).value(value).selected(selected)); 
       return this->builder(); 
      } 
     }; 

     class Builder : public TBuilder<Builder, CompanyRadioGroup> 
     { 
     public: 
      explicit Builder() : TBuilder<Builder, CompanyRadioGroup>(new CompanyRadioGroup()) 
      { 
      } 
     }; 

     static Builder create() 
     { 
      return Builder(); 
     } 
}; 

#endif 

CompanyRadioGroup.cpp

#include "CompanyRadioGroup.h" 

#include <bb/cascades/Control> 

CompanyRadioGroup::CompanyRadioGroup(Container * parent) : Control(parent){ 


} 

CompanyRadioGroup::~CompanyRadioGroup() { 
// TODO Auto-generated destructor stub 
} 

На компиляции я получаю сообщение об ошибке

CompanyRadioGroup.cpp:12:72: error: no matching function for call to 'bb::cascades::Control::Control(bb::cascades::Container*&)' 

Он появляется T хх, для Controlter для Control требуется 2 параметра, однако я не могу найти документацию по первому параметру или примеру.

Согласно Control.h файл имеет следующее:

Control(ControlPrivate &_d_ptr, Control* parent = 0); 

Может кто-нибудь посоветовать, как я прохожу _d_ptr или как я могу решить эту проблему?

ответ

0

Если вам не нужен первый параметр _d_ptr в любом месте вашего кода, создайте фиктивный абзац, который указывает «no-object», и передайте это как первый параметр. Ссылки не могут быть нулевыми в C++, поэтому вы не можете передать нулевой аргумент. Просто создайте фиктивный объект contrilPrivate и передайте ссылку на конструктор.

+0

Оказалось, что ControlPrivate - это класс, который не доступен для меня для создания, один должен расширить «CustomControl» вместо «Control», но ваш ответ помог мне помочь в решении, спасибо :) Теперь мне просто нужно выяснить, как принимать qml-детей, но это другая проблема: P – hyarion

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