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::connect: 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.
- Rejestracja:prawie 11 lat
- Ostatnio:prawie 9 lat
- Postów:199
0
- Rejestracja:prawie 11 lat
- Ostatnio:prawie 9 lat
- Postów:199
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::connect: No such slot Bazowa::Button1Clicked()
- Rejestracja:prawie 11 lat
- Ostatnio:prawie 9 lat
- Postów:199
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'
edytowany 2x, ostatnio: mielony

- Rejestracja:około 17 lat
- Ostatnio:15 minut
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.

sloty są w klasie dziedziczonej.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.
Q_OBJECT
poza dodaniem do klasy tego kodu, stanowi również instrukcję dlamoctool
by stworzyć meta dane dla danej klasy.