Qt:从另一个类执行append 我对QT和C++的研究都是新的,所以这可能是个简单的问题。

Qt:从另一个类执行append 我对QT和C++的研究都是新的,所以这可能是个简单的问题。,c++,qt,user-interface,C++,Qt,User Interface,当前问题: 我想执行一个函数,通过从另一个类调用该函数将文本追加到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

当前问题:

我想执行一个函数,通过从另一个类调用该函数将文本追加到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
}
void ClassA::MakeALogg()
{
    logger(); // The logger function appends the text to TextEditField Logg
}
我可以从类A中的另一个函数调用ClassA::logger,一切都像这样进行:

void ClassA::logger()
{
    ui->Logg->append("A log message"); // Straight forward, it appends the text
}
void ClassA::MakeALogg()
{
    logger(); // The logger function appends the text to TextEditField Logg
}
但是,当我尝试从另一个函数执行logger函数时,它将不起作用。我当前的代码在ClassB中如下所示:

这在调用logger()函数时不起作用,并且在给定的位置没有错误

最终的结果是使其能够将一个QString传递到logger()函数中,如果我通过同一个类调用它,我现在可以做这件事,例如
ClassA::MakeALogg()到ClassA::logger(QString LogMSG)
。但是我想首先确保我可以从另一个类访问ui->函数

我的理论

我想问题在于这个特定执行的类的某种形式的未实例化(例如Ui类型)。在这个阶段,我可以将一个函数从类a调用到类B,并返回{
,例如ClassA::GiveNumber()到ClassB::NumberCalculator()
}。但是,当它与Ui相关时,由于某种奇怪的原因,它无法建立连接

我还尝试在ClassB的头文件中创建一个与它的关系,但这也不起作用:

class ClassA;

class ClassB
{
public:
ClassA * PointToClassA;
}

Void ClassB::Logger()
{
PointToClassA = new ClassA;
ClassA->logger();
}

在这两种方法上,您都在创建一个新的
ClassA
对象,如果您在局部变量上调用
show
,就会看到问题:

void ClassB::MakeALogg()
{
    ClassA A;
    A.show();
    A.logger(); 
}
因此,您应该对已经存在的类实例调用
logger
方法,为此,您需要:

  • ClassA
    的指针传递给所有需要记录的类
  • 使用
    ClassA
    的静态函数或全局函数将调用路由到该实例(某种“单例模式”)
  • ClassB
    中发出一个信号,并将其连接到
    ClassA
    中用于记录的插槽(信号/插槽连接应在
    ClassA
    中完成)

如果只有两个类,正如您在“ClassB::NumberCalculator”中给出的示例所示,或者如果其他类的所有实例都是
ClassA
的唯一实例的子类,那么第三个解决方案可能是最好的。

就像您的另一个问题一样。每次调用该函数时,您都会创建一个类a的全新实例。该函数实际上可以工作,但您看不到任何内容,因为函数返回后,您立即从类B方法返回,并且本地对象被销毁。您必须向B提供指向要调用此函数的真实a对象的指针或引用。

在伪代码中似乎没有问题。你能做两件事吗?首先是切换一个断点,然后一步一步地进行(它存在于每一个像样的IDE中,就像优秀的QtCreator一样)?第二点是:您是否可以发布您的实际代码,特别是
void ClassB::MakeALogg()
方法?可能是重复的,因此您不喜欢其他问题的答案,也不想等待一段时间来获得更好的答案?好的,在这种情况下,您只需重新发布完全相同的问题;)