Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Qt connect "no such slot" when slot definitely does exist

Qt v4.8.0, VC2010 compiler

I have a QMainWindow based class and I'm trying to send it signals involving QUuid

However, every time I run it I get the errors:

Object::connect: No such slot MainWindow::on_comp_connected(QUuid) in ..\..\src\mainwindow.cpp:143
Object::connect:  (receiver name: 'MainWindow')

It's driving me potty as the slot definitely does exist (it's in the moc_)

class MainWindow : public QMainWindow
{
Q_OBJECT

// SNIP private typedefs

public:
    MainWindow(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~MainWindow();
// SNIP public methods

signals:
   void testSendQuuid(const QUuid &qcid);

public slots:
   void on_comp_connected(const QUuid &qcid);

private:
// SNIP private parts

QOpenAcnController *acnInt;  // This is where the signal comes from

};

At the end of the MainWindow constructor (the line 143 mentioned) I have:

connect(acnInt, SIGNAL(callback_comp_connected(QUuid)),
        this, SLOT(on_comp_connected(QUuid)));

Given that the slot is definitely there in the moc_mainwindow.cpp (I checked, it's slot #1), what on earth could be stopping the connection happening?

If I try to connect the testSendQuuid(QUuid) signal to the slot, I get no such signal and no such slot as well.

I cannot for the life of me figure out why Qt is denying the existence of a slot that is most definitely there!

like image 521
Richard1403832 Avatar asked May 18 '12 16:05

Richard1403832


3 Answers

I solved the problem like this

private slots:
    void on_comp_connected(const QUuid &qcid);

then in constructor

connect(tabWidget, SIGNAL(currentChanged(int)), this, SLOT(on_comp_connected(QUuid)));
like image 191
James Avatar answered Nov 16 '22 03:11

James


I solved problem by adding Q_OBJECT macro in mainwindow class. In addition to this, also check the sequence in which classes are inherited.

like image 27
FONQRI Avatar answered Nov 16 '22 04:11

FONQRI


Check whether whether that moc_mainwindow.cpp is in your Build Path. Or you are using some other moc_window.cpp file. Because, for ex: In QtCreator, it build the source to a new build directory. And also it uses old moc_cpp file(s) if you try to open the source in a different location.

What I am trying to say is the moc file which you checked may contain those slot definition, but compiler might be using some other moc file which was created earlier.

like image 25
ScarCode Avatar answered Nov 16 '22 02:11

ScarCode