C++ QT4:如何从其他类访问mainwidow上的对象?

C++ QT4:如何从其他类访问mainwidow上的对象?,c++,qt,qt4,C++,Qt,Qt4,如果Im位于mainwindow.cpp中,则我可以使用以下工具获取其中的每个对象: this->ui->textBox ... 如果有另一个类myclass2.cpp,我想获取其中一个文本框的值,该怎么办。但是它们在我的主窗口上。我不能使用这个->用户界面->文本框 访问这些对象的方法是什么 谢谢一般来说,这不是Qt特有的问题。有几种方法可以做到这一点: 在mainwindow上提供一个封装所需内容的方法,并从myclass2调用该方法 这有很多好处:干净的设计,易于以后更改,高

如果Im位于mainwindow.cpp中,则我可以使用以下工具获取其中的每个对象:

this->ui->textBox ...
如果有另一个类myclass2.cpp,我想获取其中一个文本框的值,该怎么办。但是它们在我的主窗口上。我不能使用这个->用户界面->文本框

访问这些对象的方法是什么


谢谢

一般来说,这不是Qt特有的问题。有几种方法可以做到这一点:

在mainwindow上提供一个封装所需内容的方法,并从myclass2调用该方法

这有很多好处:干净的设计,易于以后更改,高度自我记录,仅举几例。但是,要使其工作,myclass2对象仍然需要指向主窗口的指针。那么你会这样称呼它:

// In myclass2.cpp:
{
    // we're in some function of myclass2
    QString value = theMainWindow->valueOfTheTextEditYouAreInterestedIn();

    // Use the value...
}
为文本编辑提供访问器。这不是一个好主意,因为myclass2可以在主窗口不知道的情况下更改文本编辑。然而,它看起来像:

QTextEdit *getTheInterestingTextEdit()
{
     return ui->textBox;
}
通过返回一个常量指针,myclass2将能够读取但不能修改文本编辑的值,从而使其更易于接受:

const QTextEdit *getTheInterestingTextEdit() const
{
     return ui->textBox;
}
Qt提供了另一种做同样事情的方法,但您不必为此编写自己的方法:

// In myclass2.cpp:
QTextEdit *textBox = theMainWindow->findChild<QTextEdit *>("textBox");
其中mainwindow是指向myclass2需要以某种方式获取的主窗口对象的指针,textBox是您在Designer中为有趣的文本框指定的Qt对象名称。并且,只有当文本编辑对象是主窗口对象的子窗口小部件时,它才会起作用,在本例中,它应该是主窗口对象的子窗口小部件。不过,如果你一般依赖这种技术,你可能会遇到麻烦

你可以让myclass2成为mainwindow的朋友。这是非常不推荐的,所以我不打算发布一些代码-


一般来说,这不是Qt特有的问题。有几种方法可以做到这一点:

在mainwindow上提供一个封装所需内容的方法,并从myclass2调用该方法

这有很多好处:干净的设计,易于以后更改,高度自我记录,仅举几例。但是,要使其工作,myclass2对象仍然需要指向主窗口的指针。那么你会这样称呼它:

// In myclass2.cpp:
{
    // we're in some function of myclass2
    QString value = theMainWindow->valueOfTheTextEditYouAreInterestedIn();

    // Use the value...
}
为文本编辑提供访问器。这不是一个好主意,因为myclass2可以在主窗口不知道的情况下更改文本编辑。然而,它看起来像:

QTextEdit *getTheInterestingTextEdit()
{
     return ui->textBox;
}
通过返回一个常量指针,myclass2将能够读取但不能修改文本编辑的值,从而使其更易于接受:

const QTextEdit *getTheInterestingTextEdit() const
{
     return ui->textBox;
}
Qt提供了另一种做同样事情的方法,但您不必为此编写自己的方法:

// In myclass2.cpp:
QTextEdit *textBox = theMainWindow->findChild<QTextEdit *>("textBox");
其中mainwindow是指向myclass2需要以某种方式获取的主窗口对象的指针,textBox是您在Designer中为有趣的文本框指定的Qt对象名称。并且,只有当文本编辑对象是主窗口对象的子窗口小部件时,它才会起作用,在本例中,它应该是主窗口对象的子窗口小部件。不过,如果你一般依赖这种技术,你可能会遇到麻烦

你可以让myclass2成为mainwindow的朋友。这是非常不推荐的,所以我不打算发布一些代码-