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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Переопределение базового класса UI-диалога  (Прочитано 6881 раз)
D_N_S
Гость
« : Декабрь 06, 2005, 12:59 »

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

Все диалоги генерятся QtDизигнером.

Придумал два подхода на решение этой задачи.
1. Множественное наследование в impl-классах дилога, но сейчас не о нем.
2. Подмена базового класса в UI-ке... в её XML-коде. Этот базовый класс наследуется от QDialog-а + в нем свой небольшой общий для всех потомков функционал унификации передачи параметров в диалоги.

Поначалу второй способ мне казался красивее...
Итак подменил я заголовок в УИшке на следующий
Код:
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
<class>LocUserEdForm</class>
<includes>
<include location="local" impldecl="in declaration">qbaseeddlg.h</include>
</includes>
<widget class="QBaseEdDlg">

Класс QBaseEdDlg имеет только конструктор и деструктор. Проект скомпилился запустился. Добавил int член класса в QBaseEdDlg и проект после компиляции стал падать во время создания этих универсальных диалогов, падал по причине Segmentation Fault.
Что за хрень? Почему? чем ему не понравились этот интовый безобидный член класса?

Заранее спасибо за советы!

P.S. Кроме того UI-шка с таким подмененным базовым классом перестала редактироваться QtDезигнером. Грустный
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Декабрь 06, 2005, 13:29 »

в 3.3.х дезигнер глюкавый под винду, он не все файлы нормально открывает...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
D_N_S
Гость
« Ответ #2 : Декабрь 06, 2005, 13:43 »

Виноват, забыл - в данном случае всё рассматривается во FreeBSD, Kdevelop-е и qt3.3.4.
Записан
Dendy
Гость
« Ответ #3 : Декабрь 06, 2005, 14:25 »

Попробую сходу предложить вариант.

Как на счёт заюзать property? В дизайнере создаёшь диалоги, которьlе наследуются от QDialog. В каждой же реализации диалога создаёшь параметр для инициализации и получения результатов.

Устанавливаешь данньlе из базового класса QDialog::setProperty(), получаешь через QDialog::property().

P.S. Не стоит править UI руцями
Записан
Saint
Гость
« Ответ #4 : Декабрь 06, 2005, 15:50 »

А зачем такие сложности? Чем плохо множественное наследование? По-мойму это тот для чего оно и придуманно...
Записан
D_N_S
Гость
« Ответ #5 : Декабрь 06, 2005, 17:59 »

Dendy, дело говоришь! QT - снова рулит )) Тока уже поздно: сделал через множественное наследование, заодно хоть раз его на практике попробовал (+ мало ли какой общий функционал появится у диалогов) Улыбающийся а то всё не на чем было )))

Saint, Dendy, Racheengel, спасиб еще раз!
Записан
Dendy
Гость
« Ответ #6 : Декабрь 09, 2005, 19:43 »

Цитата: "Saint"
А зачем такие сложности? Чем плохо множественное наследование? По-мойму это тот для чего оно и придуманно...


Согласен, с проперти паскудньlй способ!  Веселый  Но способ как вариант. Его наличие уже греет душу.

А вообще правильно смотреть в сторону Custom Widgets:
http://doc.trolltech.com/4.1/designer-using-custom-widgets.html
Записан
D_N_S
Гость
« Ответ #7 : Декабрь 12, 2005, 21:36 »

Цитата: "Saint"
А зачем такие сложности? Чем плохо множественное наследование? По-мойму это тот для чего оно и придуманно...

Работало оно себе множественное наследование, работало... перешел назад из freeBSD-ы в Win - появились критические ошибки Грустный Вычислил кто виноват - оказалось разное функционирование множественного наследования опосля микрософтного компилятора.
Так что "что g++ хорошо, то cl - смерть".
Надоели эти приколы - сделал по рабоче-крестьянски (через property).

Эээээх... кроссплатформенность... то popup-ы не передают id свой в activated (вин->фрибсд), то множественное наследование разродилось по новому (фирбсд->вин).

Пускай теперь не так лаконично и красиво - зато везде работает )
Записан
Dendy
Гость
« Ответ #8 : Декабрь 13, 2005, 12:45 »

Уже сгораю от стьlда... Насоветовал, ьопт Улыбающийся  Вот так всегда.

Сам придерживаюсь мультика: Лучше день бежать, зато потом за 5 минут долететь!

 Веселый
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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