在c ++中创建自定义控件时扩展控件

时间:2014-01-15 16:12:07

标签: c++ blackberry-10

我正在尝试创建一个自定义控件但是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*&)'

似乎控制的构造函数需要2个参数,但是我找不到关于第一个参数或示例的任何文档。

根据Control.h文件,它具有以下内容:

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

任何人都可以建议我如何通过_d_ptr或如何克服这个问题?

1 个答案:

答案 0 :(得分:0)

如果在代码中的任何地方不需要第一个参数_d_ptr,则创建一个虚拟的abject实例,指示&#34; no-object&#34;并将其作为第一个参数传递。引用在c ++中不能为空,因此您无法传递null参数。只需创建一个虚拟的contrilPrivate对象,并将其引用传递给构造函数。