Qt, dziwna sprawa

0

Cześć :)
Mam klasę bazową BAZOWA, która dziedziczy po QtObject. Po tejże klasie bazowej dziedziczy inna klasa DZIEDZIC, a zatem dziedziczy pośrednio po QtObject.
W klasie BAZOWEJ mam czysto wirtualne funkcje i nic więcej. W klasie DZIEDZIC mam publiczne sloty. I teraz jeżeli w mainwindow.cpp podpinam sygnał pod ten slot ( publiczny) to dostaję komunikat:
QObject: No such slot BAZOWA::mojSlot();
Dlaczego w ogóle on ma szukac niby w Bazowej skoro jako pierwszy argument przekazuję wskaźnik na obiekt typu DZIEDZIC.

0

Pokaż kod

0
class Bazowa : public QObject
{
Q_OBJECT
public:
    Bazowa();
    virtual void f() =0;
    virtual void g() = 0;

};

class Dziedziczona : public Bazowa
{

public:
    Dziedziczona(QString , QString, QString , QString);
private:
   void f();
   void g();

    
public slots:
   void Button1Clicked();
   void Button2Clicked();
};

MainWindow.h:

....
private:
Dziedziczona* obj;

MainWindow.cpp:

 obj = new Dzedziczona("Da","Das","das");
QObject::connect( ui->Button1, SIGNAL(clicked()), obj, SLOT(Button1Clicked()));

I dosataję:

QObject: No such slot Bazowa::Button1Clicked()

0

Brakuje Q_OBJECT w klasie dziedziczonej.

0

ok, a dlaczego to się nie dziedziczy? Przecież do Q_OBJECT wygląda tak:

public: \
    Q_OBJECT_CHECK \
    static const QMetaObject staticMetaObject; \
    virtual const QMetaObject *metaObject() const; \
    virtual void *qt_metacast(const char *); \
    QT_TR_FUNCTIONS \
    virtual int qt_metacall(QMetaObject::Call, int, void **); \
private: \
    Q_DECL_HIDDEN_STATIC_METACALL static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **); \
    struct QPrivateSignal {};

Po dodaniu tego Q_OBJECT w Dziedziczona dostaję:

undefined reference to `vtable for Dziedziczona'

1

W sumie dziwne, że masz taki problem, skoro w te sloty zdefiniowane są w klasie bazowej, która ma makro Q_OBJECT.
Tak czy siak, każdy QObject musi mieć to makro, bo inaczej wiele ważnych rzeczy nie działa jak należy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1