Приветствую.
Пишу программу, сотояющую из одной формы.
Компилятор MSVC 6. Интеграции в среду нет, все утилиты вызываю руками.
В форме присутствует набор закладок, выполняющих совершенно логически разную работу.
В ходе разработки столкнулся с проблемой, которую не знаю как решить.
Заранее спасибо всем кто предложит решение.
Итак, передо мной встала вполне логичная задача: разнести обработку разных частей (контролов на разных закладках) формы по нескольким классам. Каждый класс обрабатывает закладку формы.
Я решил сделать это при помощи наследования.
Основной класс - обработчик формы, наследуется от двух классов, каждый из которых обрабатывает свою закладку:
//---------------------------------------------------------
//EdUI.h
class EdUI
: public ObjUI,
public TexUI,
public virtual QDialog,
public virtual Ui::Dialog
{
Q_OBJECT
public:
void Init() { TexUI::Init(); ObjUI::Init(); }
~EdUI();
//...
};
//---------------------------------------------------------
//TexUI.h
class TexUI : public virtual QDialog, public virtual Ui::Dialog
{
Q_OBJECT
protected:
void Init(); //connect-ы слотов с сигналами контролов вкладки
private slots:
//слоты обработки вкладки Tex
};
//---------------------------------------------------------
//ObjUI.h
class ObjUI : public virtual QDialog, public virtual Ui::Dialog
{
Q_OBJECT
protected:
void Init(); //connect-ы слотов с сигналами контролов вкладки
private slots:
//слоты обработки вкладки Obj
};
И всё бы хорошо, но как только я начал создавать слоты в каждом из родительских объектов, оказалось, что форма
реагирует только на сигналы/слоты, законнекченные в первом из указанных в списке наследования классов.
В данном случае, это означает, что события вкладки Obj отрабатываются нормально, в то время как на контролы вкладки Tex программа не реагирует.
Как только я заменяю порядок наследования:
class EdUI
: public TexUI,
public ObjUI,
public virtual QDialog,
public virtual Ui::Dialog
ситуация меняется на противоположную: обрабатывается вкладка Tex, а вкладка Obj не обрабатывается.
Я подозреваю, что дело в той мета-информации, которую генерирует утилита moc по каждому из моих хедэров EdUI.h, ObjUI.h, TexUI.h. Видимо, она несовместима с таким вот множественным наследованием.
Пока не хватает опыта в QT, чтобы решить проблему. Помогите, пожалуйста, у кого есть опыт.