xztau
@xztau
Я

Можно ли переопределять сигналы базового класса?

Есть класс с сигналом, предоставляющий интерфейс
class IA
{
signal: void sigA();
}
есть класс A реализация
class A
{
emit sigA();
}


где-то в основной программе:
IA* iterface = new A();
// тут подключаем сигнал
connect (interface, SIGNAL(sigA), this, SLOT(anySlot()));


Но слот не срабатывает.
Что делать с сигналом, чтобы он сработал в реализации потомка?
  • Вопрос задан
  • 3808 просмотров
Пригласить эксперта
Ответы на вопрос 4
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Всё довольно просто (точно так же можно и со слотами):
class IFoo
{
public:
    virtual void signal1() = 0;
    virtual void signal2() = 0;
}

class Bar : public QObject, public IFoo
{
    // ...
signals:
    void signal1();
    void signal2();
}

В Qt нет виртуального наследования для QObject. А тела чисто виртуальным методам будут сгенерированны в moc_* файлах.
Ответ написан
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
emit sigA() нужно делать. Или не работает?
Ответ написан
@jackroll
Сверхразум
Если я вас правильно понял:
Вам нужно создать слот, который вызовет сигнал signA();
К примеру:

//Где то внутри какого-то класса
bublik slots:
  void callSignA()
  { emit signA();  }
signal:
  signA();


//Где-то в каком-то файле.cpp
QObject::connect(куПушБатон, SIGNAL(clicked), this, SLOT(signA()));
QObject::connect(this, SIGNAL(signA()), someWgt, SLOT(someSlot()));
Ответ написан
Комментировать
@DancingOnWater
Общее замечание на основе опыта. В плюсах интерфейс в строгом смысле используется редко, зачастую нужен абстрактный класс.

Для использования сигналов в Qt есть лишь один способ, описанный в доке - отнаследоваться от QObject
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы