gpt4 book ai didi

c++ - 在 Qt 5.4 中使用命名空间

转载 作者:行者123 更新时间:2023-11-28 06:00:58 30 4
gpt4 key购买 nike

我在 Qt 5.4 的 GraphicsList.cpp 中遇到问题

#include "GraphicsList.h"

GraphicsList::GraphicsList()
{
_DesignLayerList=new QList<WorkSystem::GraphicShape>();
}
void GraphicsList::Draw(){
for(int i=this->_DesignLayerList->count();i>=0;--i){

WorkSystem::GraphicShape shapeObject=(WorkSystem::GraphicShape)_DesignLayerList[i];
// WorkSystem::GraphicShape shapeObject=_DesignLayerList[i];
shapeObject.Draw();
}
}

QQQ/GraphicsList.cpp:9: error: no matching conversion for C-style cast from 'QList' to 'WorkSystem::GraphicShape' WorkSystem::GraphicShape shapeObject=(WorkSystem::GraphicShape)_DesignLayerList[i]; ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我的GraphicList.h

#ifndef GRAPHICSLIST_H
#define GRAPHICSLIST_H

#include "GraphicShape.h"

class GraphicsList
{
public:
GraphicsList();
~GraphicsList();
void Draw();

private:
QList<WorkSystem::GraphicShape> *_DesignLayerList;
};

#endif // GRAPHICSLIST_H

我的 GraphicShap.h

#ifndef GRAPHICSHAPE_H
#define GRAPHICSHAPE_H
#include <QDebug>
#include <QPainter>
namespace WorkSystem {

class GraphicShape
{
public:
GraphicShape();
~GraphicShape();
QColor _penColor;
virtual void Draw();
};

}


#endif // GRAPHICSHAPE_H

我的 GraphicShape.cpp

#include "GraphicShape.h"
#include <QDebug>
WorkSystem::GraphicShape::GraphicShape()
{
_penColor=Qt::white;
}

void WorkSystem::GraphicShape::Draw(){
qDebug()<<"DrawDrawDrawDraw";


}

WorkSystem::GraphicShape::~GraphicShape()
{

}

请给我任何建议。

形状线.h

#ifndef SHAPELINE_H
#define SHAPELINE_H
#include <QDebug>
#include "GraphicShape.h"
namespace WorkSystem {

class shapeLine : public GraphicShape
{
public:
shapeLine();
~shapeLine();
protected:
void Draw();
};
}
#endif // SHAPELINE_H

形状线.cpp...

最佳答案

问题似乎有点误用指针。如果您查看 _DesignLayerList 成员的声明:

QList<WorkSystem::GraphicShape> *_DesignLayerList;

您没有声明一个实际的 QList 实例。相反,您正在声明一个指向 QList 的指针。因此,当您使用 _DesignLayerList[i] 时,您实际上并不是在尝试查看列表,而是通过指针算法查找另一个 QList 实例,这不是你在期待什么。

相反,您应该声明不带星号的成员变量,这意味着将是 QList 的实际实例,而不是指向 QList 的指针:

QList<WorkSystem::GraphicShape> _DesignLayerList;

这将按预期运行。我还建议您复习一下您对指针和值之间差异的理解,因为这是 C++ 的基础。在现代 C++ 中,建议尽可能避免使用原始指针,而是使用智能指针、引用和值类型,因为它们通常更合适、更安全。

如果您坚持使用指针,另一种方法是通过首先取消引用指针来执行查找,这样您就可以引用它指向的 QList 实例。但是,我不推荐这样做,因为它增加了开销和额外的复杂性而没有任何好处:

shapeObject = (*DesignLayerList)[i]

作为使用这样的原始指针的常见问题的示例:当您创建 QList 实例时,您从未真正删除它,因此这段代码会泄漏内存。

关于c++ - 在 Qt 5.4 中使用命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33294376/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com