Qt World Summit: Submit your Presentation

[Solved] Use of signal-slot connect in Windows 10

  • A failing connect for assigning a sigmal to a slot used to deliver an output message. It tells either which signal is not available for the QObject derived class or it tells when the slot rountine is not found.

    For some strange reason the message is no longer displayed. I am checking the return value of a connect by an assert. Therefore, I knew where the problem should be. However, the additional output would have been helpful as well.

    It is always hard to tell when you have seen such messages last time, but I think I have seen it also with version Qt 5.4.1 in the past.
    The only more recent change to my development system is the upgrade from Win 7 to Win 10.

    Does anybody know that the upgrade is the problem?

    BTW, I know that there is a message saying that the version is not tested with Windows 10. ;)

  • Lifetime Qt Champion


    Can you show the connection code that is failing ?

  • This is the principle code segment:

            Reload = new QTimer;
            bool boo = connect ( Reload, SIGNAL ( timeout() ), this, SLOT ( sltReload() ) );
            assert ( boo );

    However, this is irrelevant. The problem in the code is solved. When running the application, the assert was triggered telling me that there was a problem with the connect.

    Before Qt gave an additional output it was telling what the actual cause is, either "signal not found" or "slot not found". (I do not remember the correct text anymore. That was/is quite a nice feature. However, this time I could not find the message anymore.

    The actual cause was that the signal was correct, but the slot routine was wrong. Qt creator's autocomplete suggested different slots and i have chosen by mistake the wrong one which required an argument.

    Therefore, I was wondering why the failure message was not displayed at all.
    It is handy and would have saved some time.

    Is windows 10 the reason?

  • Lifetime Qt Champion

    do you mean a message like this

    QObject::connect: No such slot RecipeEdit::textChangedExternal(QString) in ../../Dropbox/PlatFormOne/TestBench/mainwindow.cpp:12

    It would normally display on win 7, but after upgrade to win 10, it will not?
    Or I read the question wrong?

  • @mrjj
    Yes, I have seen similar messages in the past.

    Yesterday when the assert was triggered I have checked output, but no message appeared anywhere. Not in the console window and not in the application output window in Qt creator.

    At first I did rebuilt and noticed that I had started in release. But after the same procedure including a rebuilt the same in debug mode.
    The only difference I see is that I have upgraded to Win10 a couple of weeks back. Therefore my suspicion that this might be releated.

    Note, I am using Qt 5.4.1 and receive a message each time starting an application that this Qt version is not tested with windows 10. However, it seem to come only with Qt 5.4.1 and not previous versions such as Qt 5.3.1. Despite the message the applications are running ok. Certainly I could upgrade to Qt 5.5, but my target platforms are currently Windows 2008 server. Therefore, I save the time.

  • Lifetime Qt Champion

    Ok. understand.
    I think I saw such messages on win 10 using Qt 5.5, but Im only 80% sure and I can't check as
    i ran W10 over win W7 again.

    However, its hard to imagine the OS having an effect on internal meta system, but I would never
    say never.

  • Lifetime Qt Champion

    Do you have the same problem if you use the new syntax ?

  • Moderators

    Do you get any output when you add qDebug("Hello!") or qWarning("Hello!") to your code? If not, that means your debug output has been disabled (that's why you don't see the message). Make sure your project doesn't define QT_NO_DEBUG_OUTPUT, QT_NO_WARNING_OUTPUT, etc.

    I'm on Windows 10 Pro (64-bit), using Qt 5.4.2 for MSVC 2013 32-bit. When I try to connect a signal to a non-existent slot, I get this message in my Qt Creator "Application Output" pane:

    QObject::connect: No such slot MyObject::fakeSlot() in ..\TestProg\main.cpp:32

    @SGaist said:

    Do you have the same problem if you use the new syntax ?

    The problem won't exist with the new syntax, because the compiler will detect the error and stop the build ;)

  • Lifetime Qt Champion

    @JKSH That's what I wanted @koahnig to check (but I haven't been really clear with my intention)

    Like you wrote, using the new syntax would avoid the need to check for that warning in the console.

  • @SGaist @mrjj @JKSH
    Sorry guys. I had apparently another notification issue here in the forum. Not sure, if I simply missed the notification.

    Thanks for pointing towards the new syntax. Have not been aware of this, because I do not read each time I am using Qt constructs in the docs. However, when the syntax causes the compiler to complain, that is really cool and saves the time.

    Actually I consider it also as strange that the OS shall have such an effect.

  • Moderators

    @koahnig: No problem :)

    By the way, since you're new to the new syntax, I hope this article will be helpful to you: http://doc.qt.io/qt-5/signalsandslots-syntaxes.html

  • @JKSH
    Yes, I have already seen this yesterday. Thanks for suggesting.

  • @SGaist @JKSH @mrjj

    Just for closing the issue here. I have the new syntax for connect. I love it, even though it has "drawbacks" of different functionality according the documentation presented by JKSH above. For me it is perfect! Thanks again for pointing towards teh new syntax.

  • Lifetime Qt Champion

    May I humbly suggest to follow your signature ? ;)

  • @mrjj
    Actually, my initial problem is not solved. ;)
    The warning at wrong connects still seems to be gone. Which might be a either a problem with my installation or a bug in Qt.

  • Lifetime Qt Champion

    oh. Well. My bad :)
    I tried to install win 10 to but it wont upgrade.
    Pretty strange what ever made it stop to display.

  • Moderators

    @koahnig said:

    The warning at wrong connects still seems to be gone.

    I get the error message for wrong connections, and I'm using Qt 5.5.1 MinGW 4.9.2 32-bit and Qt 5.4.2 MSVC 2013 32-bit on Windows 10 Pro 64-bit.

    Does qDebug() and qWarning() work for you?

  • @JKSH said:

    I get the error message for wrong connections, and I'm using Qt 5.5.1 MinGW 4.9.2 32-bit and Qt 5.4.2 MSVC 2013 32-bit on Windows 10 Pro 64-bit.

    Does qDebug() and qWarning() work for you?

    I am using qDebug all the time. It does work.

  • Moderators

    @koahnig said:

    I am using qDebug all the time. It does work.

    How about qWarning()?

  • @JKSH
    qWarning is also working.
    However, your last question brought up a clue of what might have been the case.

    I am using a message handler for redirecting the output of qDebug. It allows to ignore all output, to store all to a file and/or to the screen.
    Since there is a lot of output, the screen output is slowing down dramatically. Therefore, I have redirected the output only to the file. The assert was probably kicking in before the message was written to the file. I have seen this with other output before, but never with the warning for connection failures (Probably I had also screen output then).

    Anyway even when the problem was between chair and keyboard, it was good to have the discussion. Otherwise I would not have learnt about the new syntax.

    Thanks again.

  • A point I have missed in my previous response.

    I have written a small test this time.

    #include "Clas.h"
    #include <QTimer>
    #include <QDebug>
    Clas::Clas(QObject *parent) :
        QTimer *timea = new QTimer ( this );
        connect ( timea, SIGNAL ( timerout() ), this, SLOT (sltQuit() ) );
        qDebug() << "debug";
        qWarning() << "warning";
    void Clas::sltQuit()

    and here is the output

    Qt: Untested Windows version 10.0 detected!
    QObject::connect: No such signal QTimer::timerout() in ..\..\Test\CheckConnect\Clas.cpp:9

    So it is working perfectly also on windows 10 with MinGW version Qt 5.4.1.

  • Lifetime Qt Champion

    Just saw something: the warning's right, the signal is timeout not timerout

  • Moderators

    Great! :)

  • @SGaist
    Yes. That was intensional. I just tested that my installation is still providing the message.
    Thanks a lot anyway.