我对Qt和C ++一般都很陌生,所以这可能是一个简单的问题。
当前问题:
我想执行一个函数,通过从另一个类调用该函数将文本附加到TextEditField。我可以调用该函数,并通过同一个类附加文本,但是当我尝试从另一个类调用它时,它只是不会执行追加并且没有错误。
为了简单起见,我将只调用我的A和B类。
Class A // The class that was created automatically by Qt
Class B // A class that i made myself
A类有一个名为“logger”的函数,如下所示:
void ClassA::logger()
{
ui->Logg->append("A log message"); // Straight forward, it appends the text
}
我可以从A类中的另一个函数调用 ClassA :: logger ,一切都很棒:
void ClassA::MakeALogg()
{
logger(); // The logger function appends the text to TextEditField Logg
}
但是,当我尝试从另一个函数执行记录器功能时,它将无法工作。我目前的代码在 ClassB :
中看起来像这样void ClassB::MakeALogg()
{
ClassA A;
A.logger(); // The text doesn't get appended to TextEditField Logg via external class
}
这在调用logger()函数时不起作用,并且在给定的位置没有错误。
最终的结果是启用此功能以将QString传递给logger()函数,如果我通过同一个类(例如ClassA::MakeALogg() to ClassA::logger(QString LogMSG)
)调用它,那么我现在很难做到这一点。但我想首先确保我可以访问ui>从另一个班级开始。
我的理论
嗯,我想问题在于这种特定执行的类的某种形式的miss instantiation(例如Ui类型)。我可以在这个阶段调用从A类到B类的函数,并返回一个返回{for example ClassA::GiveNumber() to ClassB::NumberCalculator()
}。但是当它与Ui有关时,由于一些奇怪的原因它无法建立连接。
我也尝试在 ClassB 的头文件中与它建立关系,但这也不起作用:
class ClassA;
class ClassB
{
public:
ClassA * PointToClassA;
}
Void ClassB::Logger()
{
PointToClassA = new ClassA;
ClassA->logger();
}
答案 0 :(得分:1)
在你的两个方法中,你正在创建一个新的ClassA
对象,如果你在局部变量上调用show
,你会看到问题:
void ClassB::MakeALogg()
{
ClassA A;
A.show();
A.logger();
}
因此,您应该在已经存在的类实例上调用logger
方法,为此,您需要:
ClassA
的指针传递给所有需要记录的类,ClassA
的静态函数或全局函数将调用路由到该实例(某种“Singleton模式”),ClassB
中发出信号,并将其连接到ClassA
中用于记录的插槽(信号/插槽连接应在ClassA
中完成)。如果只有2个类,因为根据您给出的“ClassB :: NumberCalculator”示例或者其他类的所有实例都是{{1}的唯一实例的子项,第三种解决方案可能是最好的。
答案 1 :(得分:0)
就像你的另一个问题一样。每次调用此函数时,您都会创建一个全新的A类实例。该函数实际上有效,但您没有看到任何内容,因为在函数返回后,您将从B类方法返回并且本地对象被销毁。您必须为B指针或引用指向要调用此函数的实际A对象。