我还是卡住了。
我有一个创建对象的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类别之前。