Примерно так:
Код: Выделить всё
#include
class Interface1
{
public:
virtual ~Interface1(){}
signals:
virtual void somethingHappened1() = 0;
public slots:
virtual void doSomething1() = 0;
}
class Interface2
{
public:
virtual ~Interface2(){}
signals:
virtual void somethingHappened2() = 0;
public slots:
virtual void doSomething2() = 0;
}
Код: Выделить всё
class Implementation : public QObject, public Interface1, public Interface2
{
Q_OBJECT
signals:
void somethingHappened1() override;
void somethingHappened2() override;
public slots:
void doSomething1() override
{
// implementation goes here
}
void doSomething2() override
{
// implementation goes here
}
}
Что, если делать то, что сказано, приводит к другому сообщению об ошибке, в котором говорится, что если я включаю макрос Q_OBJECT в класс интерфейса, то он также должен наследовать от QObject, в противном случае он не работает.
Что приводит к появлению сообщения об ошибке наследования алмазов для QObject!
Итак, эта функция удалено в Qt 6, или я что-то упускаю?
Как мы можем иметь интерфейсы, которые определяют сигналы и слоты, а затем реализуют их в Qt?
Изменить : Использование макросов Q_DECLARE_INTERFACE и Q_INTERFACES не решает эту проблему, поскольку они позволяют только приведениям qobject правильно вызывать методы; Проблема в том, что я не могу наследовать интерфейсы с самого начала.
Изменить: см. этот пост. это именно то, что я пытаюсь сделать, но это больше не работает
Подробнее здесь: https://stackoverflow.com/questions/785 ... -and-slots