Название: [4.2.2] Разделение обработки событий формы Отправлено: Mindtraveller от Май 30, 2007, 16:37 Приветствую.
Пишу программу, сотояющую из одной формы. Компилятор MSVC 6. Интеграции в среду нет, все утилиты вызываю руками. В форме присутствует набор закладок, выполняющих совершенно логически разную работу. В ходе разработки столкнулся с проблемой, которую не знаю как решить. Заранее спасибо всем кто предложит решение. Итак, передо мной встала вполне логичная задача: разнести обработку разных частей (контролов на разных закладках) формы по нескольким классам. Каждый класс обрабатывает закладку формы. Я решил сделать это при помощи наследования. Основной класс - обработчик формы, наследуется от двух классов, каждый из которых обрабатывает свою закладку: Код: //--------------------------------------------------------- И всё бы хорошо, но как только я начал создавать слоты в каждом из родительских объектов, оказалось, что форма реагирует только на сигналы/слоты, законнекченные в первом из указанных в списке наследования классов. В данном случае, это означает, что события вкладки Obj отрабатываются нормально, в то время как на контролы вкладки Tex программа не реагирует. Как только я заменяю порядок наследования: Код: class EdUI ситуация меняется на противоположную: обрабатывается вкладка Tex, а вкладка Obj не обрабатывается. Я подозреваю, что дело в той мета-информации, которую генерирует утилита moc по каждому из моих хедэров EdUI.h, ObjUI.h, TexUI.h. Видимо, она несовместима с таким вот множественным наследованием. Пока не хватает опыта в QT, чтобы решить проблему. Помогите, пожалуйста, у кого есть опыт. Название: [4.2.2] Разделение обработки событий формы Отправлено: Lom от Май 30, 2007, 20:31 Предлагаю сделать следующее:
Код:
Получим действительно страницу с закладками, каждая из которых будет делать только то, что нужно этой закладке, и ничего не знать о другой. Мало того, такие классы (TexUI и ObjUI) можно будет класть в любое место, куда можно положить виджет. А множественное наследование применять здесь неправильно, т.к. применение наследования подразумевает, что наследник должен обладать функционалом предка. Т.е. глядя на твое решения получается что диалог EdUI у тебя должен обладать функционалом каждой из закладок, которая на нем находится. Очевидно что это не так. Название: [4.2.2] Разделение обработки событий формы Отправлено: Tonal от Май 31, 2007, 14:42 Что-то как-то наворочено получилось...
Зачем тут вообще наследование применять? Я, когда делал подобное, каждую вкладку сделал виджетом. В них всё и обрабатывал. А главная форма - создаёт все дочерние и координирует. Всё получается прозрачно и никакого лишнего наследования. ;-) |