我仍然卡住了。
我有一个创建Object的GUI类。从这个新对象的方法我想使用创建类的方法
我有一个带有line_Edits和一个Combobox的Gui(PBV)。在这个Combobox中,我可以选择不同的Geometries。 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() { }
答案 0 :(得分:3)
当PBV分配Geo_1实例时,已经在构造函数中将指针传递给自身:
@IBAction func updateDB(_ sender: Any) {
stsLabel.text = "creating table"
DispatchQueue.global().async {
// do some stuf
DispatchQueue.main.async(execute: { () -> Void in
stsLabel.text = "inserting table A"
})
// some code
// and i have some cases again
DispatchQueue.main.async(execute: { () -> Void in
stsLabel.text = "Complete"
})
}
}
为什么不保存指针以便以后使用?
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
}
修改强>
另外,您可能会遇到必须交叉包含两个标头(PBV和Geo_1)的问题,要解决此问题,请从PBV.h和forward-declare Geo_1中删除Geo_1的包含。就像这样:
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课程之前。