[Qt-interest] Connect signal to slot with derived parameter

Andras Toth parrotfortytwo at gmail.com
Thu Oct 28 20:14:18 CEST 2010


Hi,

Is there a way to connect a signal with a single parameter, which is a pointer 
to a derived class to a slot with a single parameter, which is a pointer to a 
base class?

If I run the code below, I get the following message:

QObject::connect: Incompatible sender/receiver arguments
        SomeObject::sig1(Derived*) --> SomeObject::slot1(Base*)

Qt Documentation just says "The signature of a signal must match the signature 
of the receiving slot." In my opinion, these signatures  should be matching, 
since directly  calling SomeObject::slot1() with a pointer to an instance of 
Derived is permitted.

Thanks,

Andras

PS: using Qt. 4.7, and 4.6.2 (for Maemo) in case it matters.




// main.cpp

#include <QDebug>
#include <QtGui/QApplication>


class Base {};

class Derived : public Base {};

class SomeObject : public QObject
{
    Q_OBJECT
public:
    SomeObject();
    void foo();

signals:
    void sig1(Derived * d);

public slots:
    void slot1(Base * b);
};


SomeObject::SomeObject()
{
    connect(this, SIGNAL(sig1(Derived*)),
            this, SLOT(slot1(Base*)));
}

void SomeObject::foo()
{
    emit sig1(0);
}

void SomeObject::slot1(Base * b)
{
    Q_UNUSED(b);
    qDebug() << "slot1";
}

int main(int argc, char *argv[])
{
    SomeObject so;
    so.foo();
    return 0;
}

#include "main.moc"



More information about the Qt-interest-old mailing list