Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Удаленный доступ к виджетам


Автор: gordmiand 4.3.2010, 11:46
Допустим есть 3 формы в приложении (а вообще больше):
1.mainwindow – главная форма, в виджеты которой грузятся разные формы…
2.form2 – дочерняя форма – загр-ся во фрейм main_frame формы  mainwindow…
3.form3 – тоже загружается в mainwindow  и управляет работой формы form2…
Для загрузки формы (form2) в mainwindow создаю указатель на экземпляр класса form2 и в качестве параметра конструктора данного класса в качестве родителя указываю main_frame…

Вопрос: а как мне работать с виджетами формы form2 из формы form3:  что мне указывать в качестве параметра конструктора (т.е. родителя) при создании на форме form3 указателя на экземпляр класса form2? Какой-либо виджет формы form3 я указать не могу, так как тогда вся form2 загрузится в этот виджет на form3, что мне не надо (а надо просто иметь программный доступ к виджетам формы form2 в сигналах виджетов формы form3). Можно конечно и так поступить (загрузить form2 в form3), сделав затем данному экземпляру формы form2 hide(), но это как-то не очень хорошо…Если ничего не указывать в качестве параметра конструктора класса form2, то ничего не работает (см. экземпляр ss в архиве программы), а сделать конструктор у form2 без параметров я не могу, так как в качестве данного параметра я указываю виджет формы mainwindow, в который загружается форма form2 (см. п.2 выше)…В прилагаемом архиве программы нет form3, а есть попытка использовать указатель на экземпляр ss формы form2 без указания параметра…
Подскажите программно как лучше решить обозначенную выше проблему?


Автор: gordmiand 4.3.2010, 15:49
неужели никто не знает? smile  я уже в этих наследованиях классов заблудился  smile  ...
помогите пожалуйста....

Автор: andrew_121 4.3.2010, 18:50
посмотрел ваш код, и нифига не понял, что вы хотите сделать. из того что вы описали, только еще больше путаешься.
опишите в двух словах, что хотите сделать?

Автор: gordmiand 4.3.2010, 23:08
подредактировал прогу - см. архив....
главная цель - хочу иметь доступ к виджетам формы form2 из формы form3 (хочу по щелчку кнопки на form3 спрятать форму form2)...form2, form3 предварительно грузятся на форму mainwindow в различные виджеты...остальное - см. мое первое сообщение в данной теме...  
я свою задачу решил, но это реализовано из формы mainwindow (см. в ее конструкторе connect... ), что нежелательно, так как mainwindow используется только как контейнер для отображения сразу нескольких различных форм на одном экране, а все управляющие работой приложения программные коды должны быть в соответствующих формах (их сигналах и т.п.)...подскажите программно  (прямо в архиве программы) как решить сию задачку? (см. архив - я так понимаю, что из form3 надо как-то добраться до exz1 из MainWindow и через него действовать (делать ему hide), а может и не так: может как-то проще и лучше можно сделать, но кааак???)

Автор: SABROG 5.3.2010, 01:56
Цитата(gordmiand @  4.3.2010,  23:08 Найти цитируемый пост)
что нежелательно, так как mainwindow используется только как контейнер для отображения сразу нескольких различных форм на одном экране, а все управляющие работой приложения программные коды должны быть в соответствующих формах (их сигналах и т.п.)


Если взять дизайнер, в котором открыт главный виджет, на нем 2 дочерних виджета, на каждом из дочерних виджетах по радиобатону. В визуальном режиме ты поключаешь сигнал clicked() одного к слоту setChecked() другого. Сохраняешь .ui форму. Собираешь программу. Появляется файл типа ui_*.cpp. Если внутрь заглянешь, то увидишь, что указатели "вяжутся" напрямую в setupUi(). Ни первый радиобатон подвязывает к себе второй, ни второй подвязывает первый в "соответствующих формах", а родитель устанавливает отношения между ними. Перекладывать родительские обязанности рожать детей, водить их в детсад, учить, кормить и т.п. на самих детей это неправильно, всем известно кто получается из беспризорников. Так что, если хочешь дать возможность одному из детей сделать "тёмную" (hide()) другому ребенку, то решать это должен родитель, в конструкторе или еще где, не важно. Он дал возможность, он также её и заберет, когда надо будет.

Автор: gordmiand 5.3.2010, 06:30
SABROG: ммм smile ...покажите пож-та на примере (исправьте пож-та в моем архиве программы - см. выше  Proj5_03_v2.rar...) smile 

Автор: SABROG 5.3.2010, 09:51
Ты правильно делал, когда вызывал connect() в конструкторе MainWindow.

Автор: gordmiand 6.3.2010, 20:04
пасиба за овтеты...пока все....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)