В общем, есть примерно такой код (упрощённо):
Example:class MainWindow : public QWidget
{
Q_OBJECT
private:
..............................
QSplitter *splitter;
PhotoWorkArea *work_area;
..............................
}
MainWindow::MainWindow(QWidget *parent)
: QWidget{parent}
{
..............................
splitter = new QSplitter{this};
work_area = new PhotoWorkArea{splitter};
..............................
}
Я хочу чтобы из
PhotoWorkArea
можно было иметь прямой доступ к другим виджетам, которые включённы в
MainWindow
. Иными словами, мне нужно иметь прямой доступ из одного включённого в
MainWindow
объекта к другим.
Я патался сделать
PhotoWorkArea
другом
MainWindow
и включить
main_window.hpp
в
photo_work_area.hpp
, но так как второй уже включён в первый, то получается взаимное включение, из-за чего всё ломается. Поэтому единственный вариант, который мне пришёл в голову, включить
main_window.hpp
в
photo_work_area.cpp
, и писать в каждом методе, в котором мне нужен доступ к родительскому (в иерархии
QObject
)
MainWindow
следующее:
MainWindow *main_window = qobject_cast<MainWindow*>(this->parentWidget()->parentWidget());
Всё это как-то костыльно и криво. Подскажите, как лучше реализовать задуманное? Я думаю, что такая проблема не нова, и многие с ней уже сталкивались. Но я не знаю как это можно загуглить.