Russian Qt Forum
Ноябрь 24, 2024, 12:56 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: управление окнами MDI  (Прочитано 12091 раз)
jerdeks
Гость
« : Март 23, 2010, 10:16 »

такой вопрос. можно ли из subwindow управлять главной формой? например, по какому-то событию в subwindow выводить инфу в statusbar,  который в главном окне?

собственно, вопрос-то шире. как вообще из одной формы обращаться к элементам другой? если в обоих формах подключить хедеры друг друга получается множественная ссылка. кто знает, помогите разобраться.
Записан
voronElf
Гость
« Ответ #1 : Март 23, 2010, 10:35 »

можно конечно. в форме которая обращается дожен быть адрес той формы, к которой обращаются. Ну или этот адрес можно получать откуда-нибудь (например из каркаса приложения, если предусмотрен в архитектуре).
Хедеры можно подключать в файлах реализации.
Или при разработке структуры проекта продумывать подрядок подключения хедеров. У меня например главное окно о суб-окнах не знает ничего (хедеры соотв. не подключаются), просто предоставляет интерфейс для добавления субокна, зато все модули о главном окне знают (подключают хедеры каркаса) и могут его адрес получить из каркаса.
Записан
alexman
Гость
« Ответ #2 : Март 23, 2010, 10:36 »

1. Можно использовать сигналы/слоты.
2. Подключай файлы в cpp, а в h-файлах храни указатели.
Записан
developer
Гость
« Ответ #3 : Март 23, 2010, 11:20 »

Я бы сделал так

Сначала сохранил бы все формы в QMap* map - где ключ ето имя формы а значение - объект формы.  Ету структуру я б сохранил именно в классе главного окна, и заполнил ее нужными формами при конструировании главного окна. Причем класс каждой формы должен иметь указатель на главную форму.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Март 23, 2010, 12:47 »

>>как вообще из одной формы обращаться к элементам другой
тема тут неоднократно поднималась, ищите.
Записан

Юра.
jerdeks
Гость
« Ответ #5 : Март 23, 2010, 18:35 »

в форме которая обращается дожен быть адрес той формы, к которой обращаются.
а как это - должен быть адрес? ну теоретически-то понятно, но как это реально сделать?
главное окно о суб-окнах не знает ничего (хедеры соотв. не подключаются), просто предоставляет интерфейс для добавления субокна, зато все модули о главном окне знают (подключают хедеры каркаса) и могут его адрес получить из каркаса.
но ведь суб окна должны появляться по событиям главного окна, а оно оних ничего не знает. как их вызвать?

Я бы сделал так

Сначала сохранил бы все формы в QMap* map - где ключ ето имя формы а значение - объект формы.  Ету структуру я б сохранил именно в классе главного окна, и заполнил ее нужными формами при конструировании главного окна. Причем класс каждой формы должен иметь указатель на главную форму.
крута, но я не понял( может быть какой-нить пример есть?
Записан
jerdeks
Гость
« Ответ #6 : Март 23, 2010, 18:36 »

>>как вообще из одной формы обращаться к элементам другой
тема тут неоднократно поднималась, ищите.

спасибо
Записан
jerdeks
Гость
« Ответ #7 : Март 23, 2010, 21:06 »

2. Подключай файлы в cpp, а в h-файлах храни указатели.
а это как? объясни пожалуйста
Записан
alexman
Гость
« Ответ #8 : Март 23, 2010, 21:10 »

a.h
Код:
class B;
class A
{
...
B* b;
};

a.cpp
Код:
#include "b.h"
...

b.h
Код:
class A;
class B
{
...
A* a;
};

b.cpp
Код:
#include "a.h"
...
Записан
developer
Гость
« Ответ #9 : Март 24, 2010, 00:38 »

Примерчик.
Записан
developer
Гость
« Ответ #10 : Март 24, 2010, 00:40 »

Если что-то непонятно - обращайся. ПРимер нормально компилиться. Может поможет
Записан
voronElf
Гость
« Ответ #11 : Март 24, 2010, 06:30 »

Цитировать
а как это - должен быть адрес? ну теоретически-то понятно, но как это реально сделать?
внутренняя переменная класса, как у alexman в примере кода.

Цитировать
но ведь суб окна должны появляться по событиям главного окна, а оно оних ничего не знает. как их вызвать?
главное окно о своих событиях отсылает сигналы и все. Что происходит по реакции на эти сигналы - оно не знает. А в слотах может быть что угодно, в том числе и создание субокон.
Записан
jerdeks
Гость
« Ответ #12 : Март 24, 2010, 18:00 »

Примерчик.
спасибо. так тоже интересно, но я с мди хочу.

внутренняя переменная класса, как у alexman в примере кода.

сделал, компилица, крута. но к элементам главной формы все равно не обратиться. подключил в субформе ui_mainwondow.h, тогда доступ к её уи есть, все компилица, но вылетает с ошибкой секгментации
Записан
jerdeks
Гость
« Ответ #13 : Март 24, 2010, 18:04 »

главное окно о своих событиях отсылает сигналы и все. Что происходит по реакции на эти сигналы - оно не знает. А в слотах может быть что угодно, в том числе и создание субокон.

я правильно понимаю: слоты это процедуры, которые обрабатывают сигналы? если да, то в какой форме описывать слоты? и как сигналы будут ловиться? и где connect(...) писать?

извините уж за ламерство, в дельфи такого не было)))
« Последнее редактирование: Март 24, 2010, 22:46 от jerdeks » Записан
voronElf
Гость
« Ответ #14 : Март 25, 2010, 08:32 »

Цитировать
но к элементам главной формы все равно не обратиться
эт смотря как ты подключил ui в свою форму, если ui в private засунул, то конечно не обратишься из другого класса.

как описывать слоты это в документацию (как обычные методы класса, только в разделе public slots:)

connect нужно делать там, где известны адреса обоих объектов, учавствующих в коннекте (в одной из форм можно делать, которая знает о другой форме)

если законекчено, то в ответ на сигнал вызывается соответствующий слот. Подробнее механизм опять же в доках. Кажется в книжке Бланшета (или у Шлее) описано все это было...
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.