gpt4 book ai didi

c++ - Qt C++在创建对象中使用创建类的方法

转载 作者:行者123 更新时间:2023-11-27 23:57:14 24 4
gpt4 key购买 nike

我还是卡住了。

我有一个创建对象的 GUI 类。从这个新对象的方法中,我想使用创建类的方法

我有一个带有 line_Edits 和组合框的 Gui(PBV)。在此组合框中,我可以在不同的几何图形之间进行选择。 Geo_1,Geo_2,...继承自 Geometry。根据组合框中的条目,我想创建不同的对象(Geo_1、Geo_2、...),然后根据 Geo_n-Object 的需要设置创建类的 lineEdits。

我不想用信号槽来做到这一点

我就此提出了不同的问题,但我无法进一步了解。

我不知何故觉得这是一种递归...有解决方案吗?

这是我的代码:

PBV.h:

#include "../Geometry/Geo_1.h"

class PBV : public Tab
{
Q_OBJECT
public:
explicit PBV (QWidget *parent = 0);
~ PBV ();
virtual void printContent( QStringList *const qsl);

private:
Geo_1 *GEO_1;
Geometry *GEO;
}

PBV.cpp:


Geo_1 *GEO_1;
GEO_1 = new Geo_1(this);
GEO_1->set_LNE_default();

.

Geo_1.h:
#ifndef GEO_1_H
#define GEO_1_H
#include "Geometry.h"
#include "../Tabs/PBV.h"
class Geo_1: public Geometry
{
Q_OBJECT
public:
Geo_1 (QObject *_parent = 0);
virtual void set_LNE_default();
};
#endif // GEO_1_H

.

Geo_1.cpp:
#include "Geometry.h"
#include <QDebug>
#include "Geo_1.h"
#include "../Tabs/PBV.h"

Geo_1::Geo_1(QObject*_parent)
: Geometry(_parent) {}

void Geo_1::set_LNE_default()
{
// here I want to use printContent
}

.

Geometry.h:

#ifndef GEOMETRY_H
#define GEOMETRY_H
#include <QObject>

class Geometry : public QObject
{
Q_OBJECT
public:
Geometry(QObject *_parent=0);
~Geometry();
virtual void set_LNE_default();
};
#endif // GEOMETRY_H

.

Geometry.cpp:

#include "Geometry.h"
#include <QDebug>

Geometry::Geometry(QObject *_parent)
: QObject(_parent) {}

Geometry::~Geometry(){}
void Geometry::set_LNE_default() { }

最佳答案

当 PBV 分配 Geo_1 实例时,它已经在构造函数中传递一个指向自身的指针:

GEO_1 = new Geo_1(this); // "this" is your PBV instance

为什么不保存指针以备后用?

Geo_1::Geo_1(PBV*_parent) : Geometry((QObject*)_parent)
{
this->pbv = _parent; // Save reference to parent
}

然后你可以这样做:

void Geo_1::set_LNE_default()
{
// here I want to use printContent
this->pbv->printContent(...); // this->pbv is your saved ptr to the PBV that created this instance
}

编辑

此外,您可能会遇到必须交叉包含两个 header (PBV 和 Geo_1)的问题,要解决此问题,请从 PBV.h 和 forward-declare 中删除 Geo_1 的包含。地理_1。就像这样:

class Geo_1;

在声明您的 PBV 类别之前。

关于c++ - Qt C++在创建对象中使用创建类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41697588/

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