Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QObject::connect: signal not found in promoted widget with Lambda syntax
Forum Updated to NodeBB v4.3 + New Features

QObject::connect: signal not found in promoted widget with Lambda syntax

Scheduled Pinned Locked Moved Unsolved General and Desktop
17 Posts 6 Posters 4.0k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • JKSHJ JKSH

    Quick test: Create a dummy class that inherits QObject (not a promoted QWidget!) and also give it a signal void deleteRequest(QVector<int> uids). Instantiate this dummy class and try to connect this dummy signal to your lambda.

    Does it work?

    Taz742T Offline
    Taz742T Offline
    Taz742
    wrote on last edited by
    #7

    Guys... I dont know why but my CustomTreeWidget class have a UI. Should it be? :D

    Do what you want.

    jsulmJ 1 Reply Last reply
    0
    • Taz742T Taz742

      Guys... I dont know why but my CustomTreeWidget class have a UI. Should it be? :D

      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #8

      @Taz742 said in QObject::connect: signal not found in promoted widget with Lambda syntax:

      I dont know why but my CustomTreeWidget class have a UI

      What do you mean? It is a GUI class, so it has a UI. Or do you mean it has ui member variable?

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      0
      • J.HilkJ Offline
        J.HilkJ Offline
        J.Hilk
        Moderators
        wrote on last edited by
        #9

        Hi,
        have you registered QVector as a metatype - using qRegisterMetaType, to use it via Signal/Slots?


        Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


        Q: What's that?
        A: It's blue light.
        Q: What does it do?
        A: It turns blue.

        Taz742T 1 Reply Last reply
        0
        • J.HilkJ J.Hilk

          Hi,
          have you registered QVector as a metatype - using qRegisterMetaType, to use it via Signal/Slots?

          Taz742T Offline
          Taz742T Offline
          Taz742
          wrote on last edited by Taz742
          #10

          @J.Hilk
          In main.cpp

              qRegisterMetaType<QVector<int>>("QVector<int>");
          

          Now i am tryng but have a same situation.

          Do what you want.

          1 Reply Last reply
          0
          • SGaistS Offline
            SGaistS Offline
            SGaist
            Lifetime Qt Champion
            wrote on last edited by
            #11

            Hi,

            here's a dummy example:

            #include <QtCore>
            #include <QtDebug>
            
            class MyClass : public QObject
            {
                Q_OBJECT
            
            signals:
                void deleteRequest(QVector<int> uids);
                void done();
            
            public slots:
                void trigger()
                {
                    emit deleteRequest(QVector<int>{1, 2, 3, 4});
                    QTimer::singleShot(1000, this, &MyClass::done);
                }
            };
            
            int main(int argc, char** argv)
            {
                QCoreApplication app(argc, argv);
            
                MyClass mc;
                QTimer::singleShot(1000, &mc, &MyClass::trigger);
                QObject::connect(&mc, &MyClass::done, qApp, &QCoreApplication::quit);
                QObject::connect(&mc, &MyClass::deleteRequest, [](const QVector<int>& data) { qDebug() << data; });
                return app.exec();
            }
            
            #include "main.moc"
            

            The content of the QVector is printed after one second and the application ends after another one. Does it work on your machine ?

            Interested in AI ? www.idiap.ch
            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

            Taz742T 2 Replies Last reply
            1
            • SGaistS SGaist

              Hi,

              here's a dummy example:

              #include <QtCore>
              #include <QtDebug>
              
              class MyClass : public QObject
              {
                  Q_OBJECT
              
              signals:
                  void deleteRequest(QVector<int> uids);
                  void done();
              
              public slots:
                  void trigger()
                  {
                      emit deleteRequest(QVector<int>{1, 2, 3, 4});
                      QTimer::singleShot(1000, this, &MyClass::done);
                  }
              };
              
              int main(int argc, char** argv)
              {
                  QCoreApplication app(argc, argv);
              
                  MyClass mc;
                  QTimer::singleShot(1000, &mc, &MyClass::trigger);
                  QObject::connect(&mc, &MyClass::done, qApp, &QCoreApplication::quit);
                  QObject::connect(&mc, &MyClass::deleteRequest, [](const QVector<int>& data) { qDebug() << data; });
                  return app.exec();
              }
              
              #include "main.moc"
              

              The content of the QVector is printed after one second and the application ends after another one. Does it work on your machine ?

              Taz742T Offline
              Taz742T Offline
              Taz742
              wrote on last edited by
              #12

              @SGaist
              Yes its work. I am also tryed to create new project, move my CustomTreeWidget and work there.

              Do what you want.

              1 Reply Last reply
              0
              • SGaistS SGaist

                Hi,

                here's a dummy example:

                #include <QtCore>
                #include <QtDebug>
                
                class MyClass : public QObject
                {
                    Q_OBJECT
                
                signals:
                    void deleteRequest(QVector<int> uids);
                    void done();
                
                public slots:
                    void trigger()
                    {
                        emit deleteRequest(QVector<int>{1, 2, 3, 4});
                        QTimer::singleShot(1000, this, &MyClass::done);
                    }
                };
                
                int main(int argc, char** argv)
                {
                    QCoreApplication app(argc, argv);
                
                    MyClass mc;
                    QTimer::singleShot(1000, &mc, &MyClass::trigger);
                    QObject::connect(&mc, &MyClass::done, qApp, &QCoreApplication::quit);
                    QObject::connect(&mc, &MyClass::deleteRequest, [](const QVector<int>& data) { qDebug() << data; });
                    return app.exec();
                }
                
                #include "main.moc"
                

                The content of the QVector is printed after one second and the application ends after another one. Does it work on your machine ?

                Taz742T Offline
                Taz742T Offline
                Taz742
                wrote on last edited by Taz742
                #13

                @SGaist
                I have a same situation in other class.
                Can you check this example?

                #ifndef IMAGEWORKER_H
                #define IMAGEWORKER_H
                
                #include <QObject>
                #include "QDebug"
                #include "globalhelper.h"
                #include "QThread"
                #include "QMutex"
                #include "QFile"
                #include "QDir"
                #include "QCryptographicHash"
                #include "QByteArray"
                
                class ImageWorker : public QObject
                {
                    Q_OBJECT
                public:
                    explicit ImageWorker(QObject *parent = 0) {
                        Q_UNUSED(parent);
                        QThread *thread = new QThread;
                        this->moveToThread(thread);
                        connect(thread, &QThread::started, this, &ImageWorker::doWork);
                        connect(this, &ImageWorker::finished, thread, &QThread::quit);
                        connect(this, &ImageWorker::finished, this, &ImageWorker::deleteLater);
                        connect(thread, &QThread::finished, thread, &QThread::deleteLater);
                        thread->start();
                    }
                
                    ~ImageWorker() {
                        qDebug() << "ImageWorker deleted";
                    }
                
                signals:
                    void finished();
                
                public slots:
                    void doWork() {
                        emit finished();
                    }
                
                private:
                    bool compareImages(const QByteArray &myImage, const QByteArray &serverImage) const
                    {
                        return myImage.toHex() == serverImage.toHex();
                    }
                
                    QByteArray fileChecksum(const QByteArray &bytes, QCryptographicHash::Algorithm hashAlgorithm = QCryptographicHash::Md5) const
                    {
                        QCryptographicHash hash(hashAlgorithm);
                        hash.addData(bytes);
                        return hash.result();
                    }
                
                };
                
                
                #endif // IMAGEWORKER_H
                
                

                Do what you want.

                1 Reply Last reply
                0
                • SGaistS Offline
                  SGaistS Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on last edited by
                  #14

                  Since you implement the constructor in your derived class, why don't you call the base class constructor ?

                  What exact situation do you have ?

                  Interested in AI ? www.idiap.ch
                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                  Taz742T 1 Reply Last reply
                  0
                  • SGaistS SGaist

                    Since you implement the constructor in your derived class, why don't you call the base class constructor ?

                    What exact situation do you have ?

                    Taz742T Offline
                    Taz742T Offline
                    Taz742
                    wrote on last edited by Taz742
                    #15

                    @SGaist said in QObject::connect: signal not found in promoted widget with Lambda syntax:

                    Since you implement the constructor in your derived class, why don't you call the base class constructor ?

                    I dont understood...

                    @SGaist said in QObject::connect: signal not found in promoted widget with Lambda syntax:

                    What exact situation do you have ?

                    QObject::connect: signal not found in ImageWorker
                    QObject::connect: signal not found in ImageWorker
                    

                    I am debuging it and its happen here:

                            connect(this, &ImageWorker::finished, thread, &QThread::quit);
                            connect(this, &ImageWorker::finished, this, &ImageWorker::deleteLater);
                    

                    Do what you want.

                    1 Reply Last reply
                    0
                    • SGaistS Offline
                      SGaistS Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on last edited by
                      #16
                      explicit ImageWorker(QObject *parent = 0)
                              : QObject(parent)
                          {
                              QThread *thread = new QThread;
                             etc.
                      

                      I removed #include "globalhelper.h" and it build successfully on macOS.

                      Interested in AI ? www.idiap.ch
                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                      Taz742T 1 Reply Last reply
                      0
                      • SGaistS SGaist
                        explicit ImageWorker(QObject *parent = 0)
                                : QObject(parent)
                            {
                                QThread *thread = new QThread;
                               etc.
                        

                        I removed #include "globalhelper.h" and it build successfully on macOS.

                        Taz742T Offline
                        Taz742T Offline
                        Taz742
                        wrote on last edited by Taz742
                        #17

                        @SGaist
                        There is great uncertainty... I changed

                        @Taz742 said in QObject::connect: signal not found in promoted widget with Lambda syntax:

                            connect(this, &ImageWorker::finished, thread, &QThread::quit);
                            connect(this, &ImageWorker::finished, this, &ImageWorker::deleteLater);
                        

                        to

                                connect(this, SIGNAL(workerFinished()), thread, SLOT(quit()));
                                connect(this, SIGNAL(workerFinished()), this, SLOT(deleteLater()));
                        

                        its work...

                        Do what you want.

                        1 Reply Last reply
                        0

                        • Login

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • Users
                        • Groups
                        • Search
                        • Get Qt Extensions
                        • Unsolved