我有一个名为“GroupBoxWidget”的基类和两个名为“GroupBoxIn”和“GroupBoxOut”的孩子。他们都尝试使用其父级作为初始化来构建自己。此时 IntelliSense 表示 CGroupBox 的构造函数不可访问。
让我们详细看看,好吗?从父母开始......
GroupBoxWidget.h
#ifndef MY_GROUPBOX_H
#define MY_GROUPBOX_H
#include <QGroupBox>
class CGroupBoxWidget: public QGroupBox
{
public:
Q_OBJECT
CGroupBoxWidget(QWidget* pParent = nullptr);
virtual ~CGroupBoxWidget();
protected:
//Create Widgets
virtual QGroupBox *CreateBtnsGroupBox() = 0;
private:
};
#endif // !MY_GROUPBOX_H
如您所见,QGroupBoxWidget 本身派生自 Qt 库中的 QGroupBox。没有任何内容被声明为私有的。纯虚函数“=0”将在孩子中被覆盖。让我们快速浏览一下它在 GroupBoxWidget.cpp 中的构造函数:
//Constructor
CGroupBoxWidget::CGroupBoxWidget(QWidget* pParent) : QGroupBox(pParent)
{
//Every MainGroupBoxWidget integrates at least two Labels, a ComboBox and a PushButton
}
现在让我们选择一个孩子来检查。看着GroupBoxIn.h:
#ifndef GROUPBOXIN_H
#define GROUPBOXIN_H
#include "GroupBoxWidget.h"
class CGroupBoxIn : public CGroupBoxWidget
{
public:
Q_OBJECT
CGroupBoxIn(QWidget* pParent = nullptr);
virtual ~CGroupBoxIn();
protected:
virtual QGroupBox *CreateBtnsGroupBox() override;
QButtonGroup *m_pButtonGroupIn;
private:
};
#endif // !GROUPBOXIN_H
这里一切都好。纯虚函数覆盖基类中的虚函数。但是当我尝试在GroupBoxIn.cpp中构造它时,我在初始化列表下方通过父类正好在
中得到了一条细红线CGroupBoxWidgetidget(pParent)
CGroupBoxIn::CGroupBoxIn(QWidget* pParent) : CGroupBoxWidget(pParent)
{ this->setTitle("Input"); }
我想听听您关于此编译器错误从何而来的建议。我正在使用 MSVC 15、Qt 5.8、C++11 和 Windows 11。