Russian Qt Forum
Ноябрь 24, 2024, 12:57
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
управление окнами MDI
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: управление окнами MDI (Прочитано 12092 раз)
jerdeks
Гость
управление окнами MDI
«
:
Март 23, 2010, 10:16 »
такой вопрос. можно ли из subwindow управлять главной формой? например, по какому-то событию в subwindow выводить инфу в statusbar, который в главном окне?
собственно, вопрос-то шире. как вообще из одной формы обращаться к элементам другой? если в обоих формах подключить хедеры друг друга получается множественная ссылка. кто знает, помогите разобраться.
Записан
voronElf
Гость
Re: управление окнами MDI
«
Ответ #1 :
Март 23, 2010, 10:35 »
можно конечно. в форме которая обращается дожен быть адрес той формы, к которой обращаются. Ну или этот адрес можно получать откуда-нибудь (например из каркаса приложения, если предусмотрен в архитектуре).
Хедеры можно подключать в файлах реализации.
Или при разработке структуры проекта продумывать подрядок подключения хедеров. У меня например главное окно о суб-окнах не знает ничего (хедеры соотв. не подключаются), просто предоставляет интерфейс для добавления субокна, зато все модули о главном окне знают (подключают хедеры каркаса) и могут его адрес получить из каркаса.
Записан
alexman
Гость
Re: управление окнами MDI
«
Ответ #2 :
Март 23, 2010, 10:36 »
1. Можно использовать сигналы/слоты.
2. Подключай файлы в cpp, а в h-файлах храни указатели.
Записан
developer
Гость
Re: управление окнами MDI
«
Ответ #3 :
Март 23, 2010, 11:20 »
Я бы сделал так
Сначала сохранил бы все формы в QMap* map - где ключ ето имя формы а значение - объект формы. Ету структуру я б сохранил именно в классе главного окна, и заполнил ее нужными формами при конструировании главного окна. Причем класс каждой формы должен иметь указатель на главную форму.
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: управление окнами MDI
«
Ответ #4 :
Март 23, 2010, 12:47 »
>>как вообще из одной формы обращаться к элементам другой
тема тут неоднократно поднималась, ищите.
Записан
Юра.
jerdeks
Гость
Re: управление окнами MDI
«
Ответ #5 :
Март 23, 2010, 18:35 »
Цитата: voronElf от Март 23, 2010, 10:35
в форме которая обращается
дожен быть адрес
той формы, к которой обращаются.
а как это - должен быть адрес? ну теоретически-то понятно, но как это реально сделать?
Цитата: voronElf от Март 23, 2010, 10:35
главное окно о суб-окнах не знает ничего (хедеры соотв. не подключаются), просто предоставляет интерфейс для добавления субокна, зато все модули о главном окне знают (подключают хедеры каркаса) и могут его адрес получить из каркаса.
но ведь суб окна должны появляться по событиям главного окна, а оно оних ничего не знает. как их вызвать?
Цитата: developer от Март 23, 2010, 11:20
Я бы сделал так
Сначала сохранил бы все формы в QMap* map - где ключ ето имя формы а значение - объект формы. Ету структуру я б сохранил именно в классе главного окна, и заполнил ее нужными формами при конструировании главного окна. Причем класс каждой формы должен иметь указатель на главную форму.
крута, но я не понял( может быть какой-нить пример есть?
Записан
jerdeks
Гость
Re: управление окнами MDI
«
Ответ #6 :
Март 23, 2010, 18:36 »
Цитата: lit-uriy от Март 23, 2010, 12:47
>>как вообще из одной формы обращаться к элементам другой
тема тут неоднократно поднималась, ищите.
спасибо
Записан
jerdeks
Гость
Re: управление окнами MDI
«
Ответ #7 :
Март 23, 2010, 21:06 »
Цитата: alexman от Март 23, 2010, 10:36
2. Подключай файлы в cpp, а в h-файлах храни указатели.
а это как? объясни пожалуйста
Записан
alexman
Гость
Re: управление окнами MDI
«
Ответ #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
Гость
Re: управление окнами MDI
«
Ответ #9 :
Март 24, 2010, 00:38 »
Примерчик.
Записан
developer
Гость
Re: управление окнами MDI
«
Ответ #10 :
Март 24, 2010, 00:40 »
Если что-то непонятно - обращайся. ПРимер нормально компилиться. Может поможет
Записан
voronElf
Гость
Re: управление окнами MDI
«
Ответ #11 :
Март 24, 2010, 06:30 »
Цитировать
а как это - должен быть адрес? ну теоретически-то понятно, но как это реально сделать?
внутренняя переменная класса, как у alexman в примере кода.
Цитировать
но ведь суб окна должны появляться по событиям главного окна, а оно оних ничего не знает. как их вызвать?
главное окно о своих событиях отсылает сигналы и все. Что происходит по реакции на эти сигналы - оно не знает. А в слотах может быть что угодно, в том числе и создание субокон.
Записан
jerdeks
Гость
Re: управление окнами MDI
«
Ответ #12 :
Март 24, 2010, 18:00 »
Цитата: developer от Март 24, 2010, 00:38
Примерчик.
спасибо. так тоже интересно, но я с мди хочу.
Цитата: voronElf от Март 24, 2010, 06:30
внутренняя переменная класса, как у alexman в примере кода.
сделал, компилица, крута. но к элементам главной формы все равно не обратиться. подключил в субформе ui_mainwondow.h, тогда доступ к её уи есть, все компилица, но вылетает с ошибкой секгментации
Записан
jerdeks
Гость
Re: управление окнами MDI
«
Ответ #13 :
Март 24, 2010, 18:04 »
Цитата: voronElf от Март 24, 2010, 06:30
главное окно о своих событиях отсылает сигналы и все. Что происходит по реакции на эти сигналы - оно не знает. А в слотах может быть что угодно, в том числе и создание субокон.
я правильно понимаю: слоты это процедуры, которые обрабатывают сигналы? если да, то в какой форме описывать слоты? и как сигналы будут ловиться? и где connect(...) писать?
извините уж за ламерство, в дельфи такого не было)))
«
Последнее редактирование: Март 24, 2010, 22:46 от jerdeks
»
Записан
voronElf
Гость
Re: управление окнами MDI
«
Ответ #14 :
Март 25, 2010, 08:32 »
Цитировать
но к элементам главной формы все равно не обратиться
эт смотря как ты подключил ui в свою форму, если ui в private засунул, то конечно не обратишься из другого класса.
как описывать слоты это в документацию (как обычные методы класса, только в разделе public slots:)
connect нужно делать там, где известны адреса обоих объектов, учавствующих в коннекте (в одной из форм можно делать, которая знает о другой форме)
если законекчено, то в ответ на сигнал вызывается соответствующий слот. Подробнее механизм опять же в доках. Кажется в книжке Бланшета (или у Шлее) описано все это было...
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...