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. Signal Slot connection from different classes
Forum Updated to NodeBB v4.3 + New Features

Signal Slot connection from different classes

Scheduled Pinned Locked Moved General and Desktop
20 Posts 8 Posters 22.3k Views 1 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.
  • H Offline
    H Offline
    huckfinn
    wrote on last edited by
    #11

    [quote author="rokemoon" date="1313050079"]
    // here you need the pointer
    connect( &ref2ClassB, SIGNAL(trigger_Do_Some(int, int)), this, SLOT( slot_Do_Some(int, int)) );
    [/quote]

    This way I get an error C2594: 'argument' : ambiguous conversions from 'Class_B *' to 'const QObject *'

    1 Reply Last reply
    0
    • R Offline
      R Offline
      rokemoon
      wrote on last edited by
      #12

      Class_B must inherite QObject (directly or indirectly), can you give us latest code of your Class_B?

      1 Reply Last reply
      0
      • H Offline
        H Offline
        huckfinn
        wrote on last edited by
        #13

        Latest Class_B:
        @
        #include <QtCore/QThread>

        template class SWITCHEXPORT QMap< int, QString >;

        class Class_A;
        class QModelIndex;

        class SWITCHEXPORT Class_B : public QThread {
        Q_OBJECT

        public:
        /// @brief Constructor
        Class_B( void );

        void aMethod();

        signal:
        void trigger_Do_Some(int, int);

        private:
        QMap< int, QString > categoryNameByID;
        }
        @

        1 Reply Last reply
        0
        • R Offline
          R Offline
          rokemoon
          wrote on last edited by
          #14

          Can you tell us why you use QThread? Can you try inherite from QObject and tell us about result?

          1 Reply Last reply
          0
          • H Offline
            H Offline
            huckfinn
            wrote on last edited by
            #15

            There is a @QThread::start();@ in the source .cpp .

            So when I inherit from both @clas.s Class_B : public QThread, public QObject@ and I am able to compile it.

            But now I have linking errors:
            @
            3>Linking...
            3> Creating library C:\MyProject\Debug\MyProject.lib and object C:\MyProject\Debug\MyProject.exp
            3>Class_B.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const Class_B::staticMetaObject" (?staticMetaObject@Class_B@@2UQMetaObject@@B)
            3>Class_A.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const Class_B::staticMetaObject" (?staticMetaObject@Class_B@@2UQMetaObject@@B)
            3>Class_3.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const Class_B::staticMetaObject" (?staticMetaObject@Class_B@@2UQMetaObject@@B)
            3>Class_B.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall Class_B::metaObject(void)const " (?metaObject@Class_B@@UBEPBUQMetaObject@@XZ)
            3>Class_B.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall Class_B::qt_metacast(char const *)" (?qt_metacast@Class_B@@UAEPAXPBD@Z)
            3>Class_B.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall Class_B::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@Class_B@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
            3>Class_B.obj : error LNK2019: unresolved external symbol "protected: void __thiscall Class_B::trigger_Do_Some(long,long)" (?trigger_Do_Some@Class_B@@IAEXJJ@Z) referenced in function "public: virtual void __thiscall Class_B::HandleMessage(void * const)" (?HandleMessage@Class_B@@UAEXQAX@Z)
            3>C:\MyProject\Debug\MyProject.dll : fatal error LNK1120: 5 unresolved externals
            @

            1 Reply Last reply
            0
            • M Offline
              M Offline
              mrtc3
              wrote on last edited by
              #16

              When you have added Q_OBJECT to Class_B.h recently, then assure yourself that moc_ClassB.cxx has been generated as well.
              If that is the case, this moc-file should be listed in the .pro or .vcpro file as Source
              e.g.:
              @
              <Files>
              <Filter Name="Source Files">
              <File RelativePath="C:\path\moc_Class_B.cxx">
              </File>
              <!-- ....etc...-->
              @

              There are 10 types. Those who understand binary and those who don't .)

              1 Reply Last reply
              0
              • H Offline
                H Offline
                huckfinn
                wrote on last edited by
                #17

                I added these tags to the vcpro file, now I can compile and run my application.

                However, now I have a
                @
                warning C4584: 'Class_B' : base-class 'QObject' is already a base-class of 'OtherClass'
                @

                I dont like warnings :(

                1 Reply Last reply
                0
                • L Offline
                  L Offline
                  loladiro
                  wrote on last edited by
                  #18

                  Multiple inheritance is NOT supported for QObject based classes. Can you change your code?

                  1 Reply Last reply
                  0
                  • R Offline
                    R Offline
                    Ramin7000
                    wrote on last edited by
                    #19

                    main.cpp :
                    @
                    #include <QtGui>
                    #include <converter.h>

                    int main(int argc,char *argv[])
                    {
                    QApplication app(argc,argv);

                    QGraphicsScene scene(0,0,500,300);
                    QGraphicsView view(&scene);
                    
                    QLabel *l = new QLabel();
                    QSlider *s = new QSlider();
                    
                    l->setText("Move the slider handle");
                    s->setOrientation(Qt::Horizontal);
                    
                    l->setGeometry(100,100,150,50);
                    s->setGeometry(100,200,150,50);
                    
                    Converter *ms = new Converter(s,l);
                    
                    
                    scene.addWidget(l);
                    scene.addWidget(s);
                    
                    view.show();
                    return app.exec&#40;&#41;;
                    

                    }@

                    converter.cpp :
                    @
                    #include "converter.h"

                    Converter::Converter(QSlider *s, QLabel *l)
                    {
                    connect(s,SIGNAL(valueChanged(int)),this,SLOT(Changer(int)));
                    connect(this,SIGNAL(Changer(QString)),l,SLOT(setText(QString)));
                    }

                    void Converter::Changer(int x)
                    {
                    Changer(QString::number(x));
                    }
                    @

                    converter.h :
                    @
                    #ifndef CONVERTER_H
                    #define CONVERTER_H

                    #include <QtGui>

                    class Converter : public QObject
                    {
                    Q_OBJECT

                    public:
                    Converter(QSlider*,QLabel*);

                    protected slots:
                    void Changer(int);

                    signals:
                    void Changer(QString);

                    };

                    #endif // CONVERTER_H
                    @

                    [Edit: Please use @ tags around code. I have added them here. -- mlong]

                    Ramin Lohrasbi

                    1 Reply Last reply
                    0
                    • V Offline
                      V Offline
                      vittalonline
                      wrote on last edited by
                      #20

                      Use Q_PROPERTY for passing arguments in Class-B

                      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