Как правильно наследовать несколько интерфейсов, которые объявляют сигналы и слоты в Qt 6C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как правильно наследовать несколько интерфейсов, которые объявляют сигналы и слоты в Qt 6

Сообщение Anonymous »

Я хочу иметь два разных класса интерфейса, которые объявляют сигналы и чисто виртуальные слоты, и иметь класс реализации, который реализует их оба и, таким образом, наследует их отдельные сигналы и слоты. Позже в моем коде я хочу создать объект класса реализации и передать его как указатель на классы интерфейса и подключить к нему сигналы и слоты, и я ожидаю, что будут вызваны реализованные слоты класса реализации.
Примерно так:

Код: Выделить всё

#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
}
}
Однако это работает только в моем проекте Qt 5 .pro. в проектах Qt 6 и в моем случае Qt 6.6.2 CMake QML при написании этого сообщения в классах интерфейса появляется предупреждение о том, что я не могу иметь виртуальные сигналы в своем коде, и сообщение об ошибке в классах интерфейса, в котором говорится, что «классы, которые объявляют сигналы и слоты должны иметь макрос Q_OBJECT"
Что, если делать то, что сказано, приводит к другому сообщению об ошибке, в котором говорится, что если я включаю макрос Q_OBJECT в класс интерфейса, то он также должен наследовать от QObject, в противном случае он не работает.
Что приводит к появлению сообщения об ошибке наследования алмазов для QObject!
Итак, эта функция удалено в Qt 6, или я что-то упускаю?
Как мы можем иметь интерфейсы, которые определяют сигналы и слоты, а затем реализуют их в Qt?
Изменить : Использование макросов Q_DECLARE_INTERFACE и Q_INTERFACES не решает эту проблему, поскольку они позволяют только приведениям qobject правильно вызывать методы; Проблема в том, что я не могу наследовать интерфейсы с самого начала.
Изменить: см. этот пост. это именно то, что я пытаюсь сделать, но это больше не работает

Подробнее здесь: https://stackoverflow.com/questions/785 ... -and-slots
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • В C++ Qt 6.6 и более поздних версиях: могут ли несколько интерфейсов предоставлять разные сигналы и слоты для одного кла
    Anonymous » » в форуме C++
    0 Ответы
    36 Просмотры
    Последнее сообщение Anonymous
  • Сигналы и слоты Qt: упрощенный синтаксис подключения?
    Anonymous » » в форуме C++
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • У меня есть сигналы в службе, я хочу выставить эти сигналы компонентам (без использования Getter)
    Anonymous » » в форуме Html
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Наследовать сразу или наследовать по одному
    Anonymous » » в форуме C++
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Наследовать сразу или наследовать по одному
    Anonymous » » в форуме C++
    0 Ответы
    33 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»