Avatar billede mysli Nybegynder
20. februar 2008 - 01:49 Der er 7 kommentarer

Problem med Qt og xcode

Hej,

Jeg er lige begyndt med Qt, og er desværre allerede stødt ind i problemer.
Jeg har lavet en class som skal modtage en text og emitte at texten er ændret.

myclass.h

#ifndef MYCLASS_H
#define MYCLASS_H

#include <QObject>
#include <QString>


class MyClass : public QObject
{
    Q_OBJECT
   
public:
    MyClass( QObject *parent = 0 );
   
    const QString& text() const;
    int getLengthOfText() const;
   
public slots:
    void setText( const QString &text);
   
signals:

    void textChanged( const QString& );
   
private:
    QString m_text;
};

#endif




myclass.cpp

#include <myclass.h>


void MyClass::setText( const QString &text )
{
    if( m_text == text )
        return;
       
    m_text = text;
    emit textChanged( m_text );
}



main.cpp

#include <QtGui>

#include <myclass.cpp>

int main( int argc, char **argv )
{
    QApplication app( argc, argv );
    QWidget widget;
    QLineEdit *lineEdit = new QLineEdit;
    QLabel *label = new QLabel;
   
   
    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget( lineEdit );
    layout->addWidget( label );
    widget.setLayout( layout );
   
    MyClass *bro = new MyClass(&app);
   
   
   
    QObject::connect(lineEdit, SIGNAL(textChanged(const QString&)),
                bro, SLOT(setText(const QString&)));
    QObject::connect(bro, SIGNAL(textChanged(const QString&)),
                        label, SLOT(setText(const QString&)));
   
    widget.show();
   
    return app.exec();
   
}



Får følgende fejl ved ved linking i xcode:

Undefined symbols:
  "MyClass::MyClass(QObject*)", referenced from:
      _main in main.o
ld: symbol(s) not found
collect2: ld returned 1 exit status


Kan simpelthen ikke finde nogen løsning på dette...
Avatar billede bertelbrander Praktikant
20. februar 2008 - 02:03 #1
Mangler du ikke bare at implementere MyClass::MyClass( QObject *parent = 0 );

Dvs. noget i stil med følgende i myclass.cpp:

MyClass::MyClass( QObject *parent = 0 )
{

}

Du skal sandsynligvis gøre noget med "parent" parameteren.
Avatar billede mysli Nybegynder
20. februar 2008 - 12:18 #2
MyClass er implementeret inline i definationen. Parent parameteren modtager et QObject parent når myclass laves, ex.

MyClass *bro = new MyClass(&app);
Avatar billede segmose Nybegynder
20. februar 2008 - 12:51 #3
Prøv lige at vise din implementation og lav følgede experiment:

erstat
MyClass *bro = new MyClass(&app);

med

QObject *qobj = &app;
MyClass *bro = new MyClass(qobj);
Avatar billede mysli Nybegynder
20. februar 2008 - 15:52 #4
Får samme fejl selv om de erstattes. Prøvede for sjov skyld lige at smide det hele i EN fil, main.cpp, men samme skete der..
Avatar billede bertelbrander Praktikant
20. februar 2008 - 19:52 #5
Så vidt jeg kan se har du i class'en:

MyClass( QObject *parent = 0 );

Det er ikke selve funktionen, kun en "prototype".
Avatar billede segmose Nybegynder
24. februar 2008 - 22:47 #6
Ja, hvis det er hele koden han har vist mangler implementationen af MyClass constructoren, som fejlen jo også siger:
Undefined symbols: -- implementation mangler
  "MyClass::MyClass(QObject*)", referenced from: -- der er constructoren der mangler
      _main in main.o -- kaldes herfra.
ld: symbol(s) not found
Avatar billede scheea2000 Nybegynder
14. marts 2008 - 16:08 #7
... og I stedet for at lave et bro objekt, kunne du også bare nedarve fra en af klasserne og den vej override et af de public slots og så 'connecte' de to widgets direkte.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester