В настоящее время я пытаюсь наследовать от двух интерфейсов.
Первый определяет все сигналы, второй - все соответствующие слоты, которые будут использоваться для отображения результатов вызовов функций сигналов.
// Like the input of the System
class A : public QObject
{
Q_OBJECT
Signals :
void signalA();
....
void signalN();
};
// The output of the System
class B : public QObject
{
Q_OBJECT
public slots:
virtual void slotA();
...
virtual void slotN();
};
В конце мне нужно несколько классов, наследующих класс A или класс B, но также должно быть возможно наследовать A и B как:
// Can be used as Input and Output at the same time for example a GUI
class C : public A, public B // will not work
{
Q_OBJECT
public slots:
void slotA() override;
...
void slotN() override;
};
Итак, Class C должен реализовывать слоты, но также иметь возможность излучать сигналы из класса А.
В моем Main я бы создал два списка QL со всеми «входами» (классы, наследующие A) и всеми «выходами» ( Классы, наследующие B).
Списки передаются контроллеру, который соединяет все входные сигналы с обрабатывающими их слотами, и все результаты этой обработки должны быть добавлены к выходным слотам.
Поэтому C следует добавить для обоих списков, так как он может использоваться как вход и выход.
Это будет выглядеть так:
int main()
{
QList<A*> inputs;
QList<B*> outputs;
C* c = new C();
inputs.append(c);
outputs.append(c);
Controller* controll = new Controller(inputs, outputs);
...
}
Но я не могу наследовать оба класса, потому что я бы наследовал QObject дважды.
С другой стороны, я не могу создать интерфейсы без QObject, потому что я не смогу использовать классы, наследующие только один из интерфейсов, так как один из них пропустил бы QObject.
Создание третьего интерфейса и копирование всех сигналов из A и слотов из B было бы возможно, но на самом деле это не то, чего я хочу.
Так есть ли какое-нибудь решение, которое я мог бы попытаться сделать этой работой?