Anzeige:
Ergebnis 1 bis 9 von 9

Thema: Wie auf Objekte einer fremden Klasse zugreifen??

  1. #1
    Registrierter Benutzer
    Registriert seit
    11.06.2004
    Ort
    Berlin
    Beiträge
    55

    Wie auf Objekte einer fremden Klasse zugreifen??

    Hi,

    ich hoffe der Titel ist richtig gewählt.



    Also, ich will im QT Designer aus einer selbstgeschriebenen Klasse auf ein QLineedit aus dem mainform zugreifen.

    settings.h
    Code:
    #include <qsettings.h>
    #include "tvtool.h"
    
    class Set
    {
        QSettings* settings;
        //mainform* m;
    public:
        
        void writechannel();
    };
    settings.cpp
    Code:
    #include "settings.h"
    #include "tvtool.h"
    #include <qdir.h>
    #include <qlineedit.h>
    #include <qlistbox.h>
    
    void Set::writechannel()
    {
        settings = new QSettings();
        settings -> insertSearchPath( QSettings::Unix, QDir::homeDirPath() );
        settings -> beginGroup( ".TVgrabTool" );
        settings -> writeEntry( "/Channels/" + mainform::kanalname.text(), mainform::kanal_ID.text() ); 
        //m =  new mainform;
        mainform::kanalliste.insertItem( mainform::kanalname.text(), -1);
        delete settings;
    }
    fehler beim kompilieren:
    Code:
    g++ -c -pipe -Wall -W -O2 -fomit-frame-pointer -pipe -march=i586 -mcpu=pentiumpro  -DQT_NO_DEBUG -DQT_SHARED -DQT_THREAD_SUPPORT -I/usr/lib/qt3/mkspecs/default -I. -I/usr/lib/qt3//include -I.ui/ -I. -I.moc/ -o .obj/settings.o settings.cpp
    settings.cpp: In member function `void Set::writechannel()':
    settings.cpp:12: error: type `mainform' is not a base type for type `Set'
    settings.cpp:12: error: type `mainform' is not a base type for type `Set'
    settings.cpp:14: error: type `mainform' is not a base type for type `Set'
    settings.cpp:14: error: type `mainform' is not a base type for type `Set'
    make: *** [.obj/settings.o] Fehler 1
    Geändert von fraggo01 (18-08-2004 um 18:43 Uhr)

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Du musst ansich nur einen Pointer in der Klasse bekannt machen, zB im Konstruktor übergeben:

    Code:
    class Set
    {
    public:
        Set(mainform* m) : m_mainfor(m) {}
    
    private:
        mainform * m_mainform;
    };
    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer
    Registriert seit
    11.06.2004
    Ort
    Berlin
    Beiträge
    55
    Funktioniert irgendwie nicht...


    settings.h:
    Code:
    #include <qsettings.h>
    #include "tvtool.h"
    
    
    class Set
    {
        QSettings* settings;    
        mainform * m_mainform;
        //mainform* m;    
    public:
        Set(mainform* m) : m_mainform(m) {}
        void writechannel();
    };
    settings.cpp:
    Code:
    #include "tvtool.h"
    #include <qdir.h>
    #include <qlineedit.h>
    #include <qlistbox.h>
    
    void Set::writechannel()
    {
        settings = new QSettings();
        settings -> insertSearchPath( QSettings::Unix, QDir::homeDirPath() );
        settings -> beginGroup( ".TVgrabTool" );
        settings -> writeEntry( "/Channels/" + m_mainform->kanalname->text(), m_mainform->kanal_ID->text() ); 
        //m =  new mainform;
         m_mainform->kanalliste->insertItem( m_mainform->kanalname->text(), -1);
        delete settings;
    }
    So rufe ich die Klasse auf:
    Code:
    Set wt;
    wt.writechannel();

    Fehler:
    Code:
    In file included from .ui/tvtool.cpp:30:
    tvtool.ui.h: In member function `virtual void mainform::kanal_add_clicked()':
    tvtool.ui.h:381: error: no matching function for call to `Set::Set()'
    settings.h:6: error: candidates are: Set::Set(const Set&)
    settings.h:12: error:                 Set::Set(mainform*)
    make: *** [.obj/tvtool.o] Fehler 1

    Na ja, ich werd mir mal konstruktor und destruktor genau anschauen, das ist mir alles noch ziemlich schleierhaft...


    EDIT:
    Ich hab mal noch einen standard konstruktor "Set();" in die klasse eingefügt. jetzt kommt der fehler:
    Code:
    .obj/tvtool.o(.text+0x628c): In function `mainform::kanal_add_clicked()':
    : undefined reference to `Set::Set[in-charge]()'
    collect2: ld returned 1 exit status
    Geändert von fraggo01 (19-08-2004 um 11:58 Uhr)

  4. #4
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    undefined reference to `Set::Set[in-charge]()'
    Die Klasse erwartet Parameter für den Konstruktor
    zu dem würde mich Interessieren wie du dein Projekt erstellt (KDevelop oder nur QT?) hast, wegen dem Linker Fehler.

  5. #5
    Registrierter Benutzer
    Registriert seit
    11.06.2004
    Ort
    Berlin
    Beiträge
    55
    Die Klasse erwartet Parameter für den Konstruktor
    Aber ich hab doch den Konstruktor ohne Parameter in der Klasse angegeben (Set())..



    Mit QT(-designer)

    mit qmake und dann make
    Geändert von fraggo01 (19-08-2004 um 12:55 Uhr)

  6. #6
    Registrierter Benutzer
    Registriert seit
    11.06.2004
    Ort
    Berlin
    Beiträge
    55
    Irgendwie verstehe ich den sinn des konstruktors "Set(mainform* m) : m_mainform(m) {}" nicht..

    hab das mal ausprobiert, kompiliert ohne fehler durch aber das programm stürtzt mit einem Segmantation Fault ab, wenn ich die klasse per button aufrufe:

    settings.h:
    Code:
    #include <qsettings.h>
    #include "tvtool.h"
    
    
    class Set
    {
        QSettings* settings;    
        mainform* m_mainform;
        //mainform* m;    
        int a;
    public:
        //Set();
        //Set(mainform* m) : m_mainform(m) {} 
        void writechannel();
    };
    settings.cpp:
    Code:
    #include <qdir.h>
    #include <qlineedit.h>
    #include <qlistbox.h>
    
    
    void Set::writechannel()
    {
        settings = new QSettings();
        settings -> insertSearchPath( QSettings::Unix, QDir::homeDirPath() );
        settings -> beginGroup( ".TVgrabTool" );
        settings -> writeEntry( "/Channels/" + m_mainform->kanalname->text(), m_mainform->kanal_ID->text() ); 
        //m =  new mainform;
        m_mainform->kanalliste->insertItem( m_mainform->kanalname->text(), -1);
        delete settings;
    }
    So rufe ich die Klasse auf:
    Code:
    void mainform::kanal_add_clicked()
    {
        /*QSettings* settings;
        settings = new QSettings();
        settings -> insertSearchPath( QSettings::Unix, QDir::homeDirPath() );
        settings -> beginGroup( ".TVgrabTool" );
        settings -> writeEntry( "/Channels/" + kanalname->text(), kanal_ID -> text() ); 
        kanalliste -> insertItem( kanalname->text(), -1);
        delete settings;*/
        
        Set wt;
        wt.writechannel(); 
    }
    EDIT:
    Hab mal das objekt m_mainform nicht als zeiger auf mainform gemacht.
    Jetzt funktioniert die klasse soweit, das QSettings aufgerufen wird und die konfiguration geschrieben wird.
    Nur
    Code:
    m_mainform->kanalliste->insertItem( m_mainform->kanalname->text(), -1);
    funktioniert nicht...
    Geändert von fraggo01 (19-08-2004 um 14:23 Uhr)

  7. #7
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von fraggo01
    Irgendwie verstehe ich den sinn des konstruktors "Set(mainform* m) : m_mainform(m) {}" nicht..
    Damit du den mainform Pointer in Set zur Verfügung hast?
    Soll der Pointer durch schwarze Magie gesetzt werden?

    Könnte zwar klappen (kenn mich mit schwarzer Magie nicht so aus), aber normalerweise wird man vermutlich bei Erzeugung der Set Instanz einfach den entsprechende Pointer an den Konstruktor übergeben.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  8. #8
    Registrierter Benutzer
    Registriert seit
    11.06.2004
    Ort
    Berlin
    Beiträge
    55
    Danke für eure hilfe, han es leider trotzdem ncht hinbekommen.
    Ich habe jetzt ne andere lösung gefunden...
    Geändert von fraggo01 (20-08-2004 um 10:58 Uhr)

  9. #9
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von fraggo01
    Danke für eure hilfe, han es leider trotzdem ncht hinbekommen.
    Sagen wir du erzeugst die Instanz von Set in MainWindow

    Code:
    Set s(this);
    Nicht so schwierig oder?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •