connect in Qt Klasse



  • Hi,
    ich habe folgendes Problem:
    Ich möchte eine connect Funktion in einer Klasse aufrufen in der ich QT Sachen reingeschrieben habe. Mit dieser connect Funktion möchte ich mich zu einem Socket verbinden, jedoch erwartet der compiler als argument eben qt variablen und denkt das die Funktion in der Klasse deklariert ist.

    main.cpp:117: error: no matching function for call to `Window::connect(int&,
    sockaddr*, unsigned int)'

    Wie kann ich nun schreiben, das er die ganz normale connect Funktion von C aufrufen soll ?
    Mir ist klar das es für Qt extra netzwerkfunktionen gibt, diese möchte ich aber aus diversen Gründen nicht verwenden.
    Ich wär für jede Hilfe dankbar.
    mfg
    smithy



  • Hi,
    ich habe folgendes Problem:
    Ich möchte eine connect Funktion in einer Klasse aufrufen in der ich QT Sachen reingeschrieben habe. Mit dieser connect Funktion möchte ich mich zu einem Socket verbinden, jedoch erwartet der compiler als argument eben qt variablen und denkt das die Funktion in der Klasse deklariert ist.

    ich denke sockets sind noch nichts für dich, über doch lieber noch ein bissel mit einfacheren widgets, layouts und dem signal & slot prinzip.



  • Ich hab ja keine Probleme mit sockets, da ich C etwas besser kann als C++ und nun hab ich eben das Problem mit den Klassen, wie oben geschildert...



  • achso...

    das connect kannst du eigentlich überall in die klasse froppen, wichtig ist nur, dass die Objekte bereits existieren müssen, bzw. mit "new" speicher allokiert wurde!

    ich hoffe ich habe mich nicht vertippt...

    class foo : public QWidget
    {
      Q_OBJECT
    
    private:
      QPushButton *button;
      void connector()
      {
        QObject::connect(button, SIGNAL(pressed() ),this , SLOT(was_passieren_soll() ) );
      }
    
    public:
      foo()
      {
        button = new QPushButton;
        connector();
      }
    };
    

    wichtig ist, dass Signal und Slot Funktioen die selben Daten erwarten bzw. liefern müssen!

    SIGNAL:
    itemchanged(int);
    SLOT:
    do(int);

    so in etwa...

    das QObject vor connect kannst du übrigens auch weglassen.

    du kannst auch eigene objekte verwenden, mache ich auch, du könntest ja mal den problemcode posten...



  • Damit hab ich kein Problem, hier einfach mal der Code ...

    class Window : public QWidget{
    	Q_OBJECT
    	 public:
    	 Window();	
    
    	 public slots:
    	 int verbinden();
    
    }
    Window::Window(){
    QPushButton *connect_b = new QPushButton(tr("connect"));
    connect(connect_b,SIGNAL(clicked()),this,SLOT(verbinden()));
    ...
    }
    
    int Window::verbinden(){
    ...
    //Nun möchte ich mich zu sock_fd übers Netzwerk verbinden,
    //Qt oder C++ denkt aber das die connect funktion irgendwo in der Klasse
    //zu finden ist. Wie kann ich nun sagen das das eine sting normale Funktion ist,
    //die er nicht in dieser Klasse findet ?
    connect(sock_fd,(struct sockaddr *)&struktur, sizeof(struct sockaddr)); 
    ...
    }
    

    Ich hoffe mein Problem wird nun ersichtlicher...



  • evtl, würde ein umbenennen der funktion helfen?



  • Welcher Funktion?
    Das würde doch absolut nichts ändern oder ?

    Ich hab jetzt mal das ganze einfach ohne qt geschrieben, es gibt keine Probleme das connect in einer Klasse aufzurufen, er meldet nur einen Fehler, weil
    als Argumente in der Funktion qt Variablen erwarten werden...

    Main.cpp:117: error: no matching function for call to `Window::connect(int&,
    sockaddr*, unsigned int)'
    /usr/include/qt4/QtCore/qobject.h:174: error: candidates are: static bool
    QObject::connect(const QObject*, const char*, const QObject*, const char*,
    Qt::ConnectionType)
    /usr/include/qt4/QtCore/qobject.h:275: error: bool
    QObject::connect(const QObject*, const char*, const char*,
    Qt::ConnectionType) const


Log in to reply