如果我在mainwindow.cpp中,那么我可以通过以下方式获取其上的每个对象:
this->ui->textBox ...
如果有另一个类(myclass2.cpp)并且我想获得textBox的一个值,该怎么办?但它们在我的主窗口。我不能使用这个 - > ui-> textBox
什么方式可以访问对象?
谢谢
答案 0 :(得分:4)
一般来说,这不是Qt特有的问题。有几种方法可以做到这一点:
在mainwindow
上提供封装您想要的内容的方法,并从myclass2
调用该方法。
// In mainwindow.cpp:
QString mainwindow::valueOfTheTextEditYouAreInterestedIn() const
{
return ui->textBox->toPlainText();
}
这有很多好处:简洁的设计,以后容易更改,以及高度自我记录,仅举几例。为此,您的myclass2
对象仍然需要指向主窗口的指针。然后你会这样称呼它:
// In myclass2.cpp:
{
// we're in some function of myclass2
QString value = theMainWindow->valueOfTheTextEditYouAreInterestedIn();
// Use the value...
}
为文本编辑提供访问者。这不是一个好主意,因为myclass2
可以在mainwindow
知道它的情况下改变文本编辑。但是,它看起来像:
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
的朋友。这是不推荐,但我不打算发布一些代码。 : - )