Есть приложение MDI на базе MainWindow.
MainWindow содержит множество DockWidget-ов, внутри которых я разместил наборы инструментов и окно свойств для элементов.
Дочерние окна содержат в себе "левый" QWidget (который определял сам) с растянутым QGraphicsView на всю ширину и высоту виджета, занимая всё его пространство. Внутри этого же виджета я создаю объект класса QGraphicsScene, так же кастомный.
Задача:
кроме возможности обращаться из MainWindow непосредственно в сцену, чтобы например, прочитать данные из массива и изменить порядок и наборы инструментов в соответствии с содержимым документа из объектов (например, при переключении между дочерними окнами, это уже имеем). Но также обеспечить возможность "звонить" в MainWindow непосредственно из сцены, например, я выделил элемент, и хочу в панельке свойств, размещённой в MainWindow сразу отобразить его характеристики, либо по клику мыши на элемент, либо по команде контекстного меню.
0
-
Wohlstand РешениеВсё, я решил задачу сам!
Делюсь с теми, кто задаётся тем же вопросом:
Для этого я использовал метод "внешний указатель" для обеспечение обратной связи сцены в MainWindow.
Спасибо за подсказку одному моему австрийскому другу.
1) создаём статический указатель (на всякий случай, я запаковал его внутрь класса)class MainWinConnect { public: static MainWindow * pMainWin; };
и где-нибудь создаём тело для этого же указателя:MainWindow * MainWinConnect::pMainWin;
2) В конструкторе нашего класса MainWindow просто записываем адрес самого себя прямо в наш указатель:MainWinConnect::pMainWin = this;
3) Теперь стало возможным обращаться к функциям MainWindow практически из любого места, даже если объект класса MyScene создан непосредственно внутри самого MainWindow.class MainWindow { public: void callMe(int someData); ... MyScene * scene; } void MyScene::doSomething() { ... MainWinConnect::pMainWin->callMe(1234); ... }
Нравится Поделиться
Ваш ответ на вопрос
Войдите, чтобы написать ответ
Войти через TM IDПохожие вопросы
- 0
- 1
- 0
- 0
- 0
- 1
-
1
- 1
- 0
- 1
- Показать ещё