Qt:从另一个类执行追加

时间:2011-09-05 20:37:27

标签: c++ qt user-interface

我对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();
}

2 个答案:

答案 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对象。