我还是卡住了。

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

我有一个带有line_Edits和Combobox的Gui(PBV)。在此组合框中,我可以在不同的几何图形之间进行选择。继承自Geometry的Geo_1,Geo_2...。根据组合框中的条目,我想创建不同的对象(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
}


编辑

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

class Geo_1;


在声明您的PBV类别之前。

09-25 21:34