Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-41004

New connect syntax fails with msvc in special corner cases

    Details

    • Type: Bug
    • Status: Closed
    • Priority: P2: Important
    • Resolution: Out of scope
    • Affects Version/s: 5.4.0
    • Fix Version/s: None
    • Component/s: Core: Object Model
    • Labels:
      None
    • Environment:

      Windows, msvc

      Description

      Qt Creator stumbled over an issue where a connect with the new member fuction pointer based method compiled nicely but then failed at runtime with a

      QObject::connect: signal not found in Foo

      It is really much of a corner in this case which in addition seems to happen only with msvc. Not sure if this can be considered a compiler bug or a bug in Qt. Anyway I post this here for the records.

      Scenario: A class has a signal which overrides a virtual member function of its base class. When trying to connect to the signal of the derived class from outside the library (.dll) where the two classes "live", apparently a wrong method pointer is created. The result is the above message at runtime.

      Code in the library:

      ...
      class LIBSHARED_EXPORT A : public QObject
      {
      public:
          virtual void foo(int) {}
      };
      
      class LIBSHARED_EXPORT B : public A
      {
          Q_OBJECT
      signals:
          void foo(int);
          void bar();
      };
      ...
      

      Code outside the library:

          ...
          B b;
          QObject::connect(&b, &B::foo, &a, &QCoreApplication::quit); // causes runtime "QObject::connect: signal not found in B"
          QObject::connect(&b, &B::bar, &a, &QCoreApplication::quit); // succeeds
          ...
      

      See the attached msvcissue.zip for a working demo.

        Attachments

          Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

            Activity

              People

              • Assignee:
                thiago Thiago Macieira
                Reporter:
                portale Alessandro Portale
              • Votes:
                0 Vote for this issue
                Watchers:
                5 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved:

                  Gerrit Reviews

                  There are no open Gerrit changes