Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.09.2012, 17:59   #1
DDoSed
 
Регистрация: 04.09.2012
Сообщений: 5
По умолчанию Доступ между виджетами Qt

Здравствуйте.

Есть MainWindow и много виджетов которые встраиваются друг в друга(и соответственно в MainWindow).

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

Единственное, что нашел - это использовать parent. Но есть ли другой способ, более удобный? просто, если чуть-чуть изменить структуру встраивания виджетов друг в друга, то придется править много кода, который получает ссылку на нужный виджет через parent`ов и приведение типов.

Может держать обычный массив с указателями вне классов и в каждом конструкторе заносить ссылку на себя в этот массив? и использовать extern чтобы получить к нему доступ.

Буду благодарен за помощь.
DDoSed вне форума Ответить с цитированием
Старый 26.12.2012, 13:26   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Привет, DDoSed

А что значит "много виджетов которые встраиваются друг в друга"? По мне, есть главное окно MainWindow и из него организован доступ к диалоговым окнам, на которых не так много виджитов можно расположить. Под виджитами вы же подразумеваете элементы пользовательского интерфейса? Ну там: кнопки, чекбоксы и т.д.

Вы бы не могли какой-нибудь рабочий проект к своему сообщению прикрепить, чтобы можно было запустить у себя и посмотреть, как вы организуете проект. Проблема, скорее всего, в неправильной организации проекта.

Иван
8Observer8 вне форума Ответить с цитированием
Старый 26.12.2012, 22:38   #3
DDoSed
 
Регистрация: 04.09.2012
Сообщений: 5
По умолчанию

Стыдно показывать такой плохой код) у меня нету знаний по правильному проектированию программ.

Касательно темы: например, хотелось бы при изменении в настройках изменять сразу информацию на startingwidget, сейчас это сделано с помощью коннекта к слоту mainwindow (decanat.cpp 49строчка), который в свою очередь вызывает метод startingwidget`a. в идеале хотелось бы постоянно(везде) иметь доступ к указателю на startingwidget.

очень хотелось бы услышать любую конструктивную критику и советы по возможным исправлениям.

спасибо.
Вложения
Тип файла: zip 123.zip (37.2 Кб, 13 просмотров)
DDoSed вне форума Ответить с цитированием
Старый 27.12.2012, 10:23   #4
der_igel
Пользователь
 
Регистрация: 25.12.2012
Сообщений: 29
По умолчанию

Цитата:
в идеале хотелось бы постоянно(везде) иметь доступ к указателю на startingwidget.
Чем тебя не устраивает схема сигнал-слот?
der_igel вне форума Ответить с цитированием
Старый 27.12.2012, 12:48   #5
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от der_igel Посмотреть сообщение
Чем тебя не устраивает схема сигнал-слот?
Поддерживаю! проблема именно в игнорировании этой схемы
8Observer8 вне форума Ответить с цитированием
Старый 27.12.2012, 13:44   #6
DDoSed
 
Регистрация: 04.09.2012
Сообщений: 5
По умолчанию

тем что нужно осуществлять много коннектов, дочернее окно->главное->другое дочернее->его дочернее.
хочется чтобы в конструкторе создаваемого объекта сделать только один коннект вместо коннекта всей иерархии.
DDoSed вне форума Ответить с цитированием
Старый 27.12.2012, 14:07   #7
der_igel
Пользователь
 
Регистрация: 25.12.2012
Сообщений: 29
По умолчанию

т.е. ты хочешь что бы при изменении в дочернем окне обновлялось родительское? Или ещё и все дочерние?

зы В Qt вроде не рекомендуется использовать исключения.
der_igel вне форума Ответить с цитированием
Старый 01.01.2013, 19:32   #8
DDoSed
 
Регистрация: 04.09.2012
Сообщений: 5
По умолчанию

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

предположим, я на главном окне имею виджет с информацией. и еще один виджет. тот в свою очередь иногда создает свой диалог, а этот диалог включает в себя еще какой нибудь виджет и так далее. так вот я хочу не соединять всех их коннектами, а в конструкторе самого нижнего(глубоко) виджета написать что нибудь наподобии
Код:
connect(this, SIGNAL(somethingChanged), app->getInfoOut, SLOT(updateInfo()) );
где getInfoOut вернет ссылку на нужный мне виджет(ну в данном случ - виджет с инфо для пользователя)
DDoSed вне форума Ответить с цитированием
Старый 07.01.2013, 11:49   #9
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

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

Есть подозрения, что все твои проблемы решатся автоконнектом Qt там есть такая фича, тебе надо только именовать сигналы и слоты адекватным образом
on_<имя класса-источника сигнала>_<имя сигнала>(<параметры>)
rrrFer вне форума Ответить с цитированием
Старый 11.01.2013, 12:15   #10
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию

Цитата:
я хочу, чтобы, как бы глубоко я не залез по иерархии виджетов, я всегда имел доступ к методам, например, главного окна. но без построения кучи коннектов.
А зачем тебе на столько глубокая иерархия виджетов?
Обычно родители виджетов используют данные от своих потомков а не родители родителей (извините за каламбур).

По этому вывод один. Тебе нужно пересмотреть структуру своей программы.
Может это и чушь, но это моя чушь и я ее никому не отдам.
Shad0wF1rst вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаленный доступ... romedal7 Операционные системы общие вопросы 2 03.05.2012 14:01
Поиск маршрутов между двумя городами между n городов DorianMark Паскаль, Turbo Pascal, PascalABC.NET 11 09.11.2011 00:46
Доступ Ko$ Общие вопросы Delphi 7 28.10.2011 16:09
QT - передача данных между виджетами tumanovalex Qt и кроссплатформенное программирование С/С++ 3 26.05.2011 20:14
Отдаленный доступ между базами Access Ras2im Microsoft Office Access 0 11.03.2011 15:22