[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. ;)
-
Hi,
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?
-
Hi
do you mean a message like thisQObject::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.
-
@koahnig
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. -
Do you have the same problem if you use the new syntax ?
-
Do you get any output when you add
qDebug("Hello!")
orqWarning("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 defineQT_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 ;)
-
@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.
-
@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
-
-
May I humbly suggest to follow your signature ? ;)
-
@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.
-
@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.