Предоставить метод на 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"
- это имя объекта Qt, которое вы дали интересному текстовому полю в Designer.И это будет работать только в том случае, если объект редактирования текста является дочерним виджетом объекта главного окна, что и должно быть в этом случае.Тем не менее, вы можете столкнуться с проблемами, если в целом будете полагаться на эту технику.