Seite 1 von 1

Funktionen "undeclared" bei Subclassing von QtDesi

Verfasst: 17. Juni 2006 17:25
von gehho
Hallo,

habe heute begonnen eine simple Client-Server-Struktur in C++ zu basteln. Aber leider hab ich direkt bei der GUI Probleme. Ich habe zum ersten Mal mit dem QtDesigner gearbeitet und habe mir eine ui-Datei namens GUI.ui erstellt. Diese habe ich in mein kdevelop-Projekt eingebunden und die entsprechende Header-Datei und cpp-Datei kompiliert. Dann habe ich mir eine Klasse ServerGUI definiert, die von GUI abgeleitetet ist, damit ich meinen Code einfügen kann und später die GUI noch ändern kann.
Funktioniert auch wunderbar. Wenn ich mir ein ServerGUI-Objekt erzeuge und anzeige, sieht alles ordentlich aus. Wenn ich dann aber im Konstruktor beispielsweise auf den Button "btnServerStart" zugreifen möchte, kennt er diesen zwar, aber sagt immer, dass die Funktionen "undeclared" seien. Beim Befehl

Code: Alles auswählen

btnServerStart->setEnabled(false);
sagt er z.B.
ServerGUI.cpp: In constructor `ServerGUI::ServerGUI(QWidget*, const char*)':
ServerGUI.cpp:5: error: `setEnabled' undeclared (first use this function)
ServerGUI.cpp:5: error: (Each undeclared identifier is reported only once for each function it appears in.)
Er kennt "btnServerStart", aber anscheinend nicht die Funktion "setEnabled(bool)". Genauso verhält es sich auch bei anderen Qt-Objekten. Hat jemand eine Ahnung wieso?

Ich poste hier mal noch den gesamten Code der einzelnen Dateien. Ist ja nicht sonderlich umfangreich...

ServeGUI.h:

Code: Alles auswählen

#include <GUI.h>

class ServerGUI : public GUI {
	Q_OBJECT

	public:
		ServerGUI(QWidget* parent=0, const char* name=0);
		~ServerGUI();
};
ServerGUI.cpp:

Code: Alles auswählen

#include <ServerGUI.h>

ServerGUI::ServerGUI( QWidget* parent, const char* name )
	: GUI( parent, name ) {
	btnStartServer->setEnabled(false);
}

ServerGUI::~ServerGUI() {

}
GUI.h:

Code: Alles auswählen

#ifndef GUI_H
#define GUI_H

#include <qvariant.h>
#include <qmainwindow.h>

class QVBoxLayout;
class QHBoxLayout;
class QGridLayout;
class QSpacerItem;
class QAction;
class QActionGroup;
class QToolBar;
class QPopupMenu;
class QPushButton;
class QListView;
class QListViewItem;
class QTextEdit;

class GUI : public QMainWindow
{
    Q_OBJECT

public:
    GUI( QWidget* parent = 0, const char* name = 0, WFlags fl = WType_TopLevel );
    ~GUI();

    QPushButton* btnStartServer;
    QListView* listClients;
    QTextEdit* textDisplay;

protected:

protected slots:
    virtual void languageChange();

};

#endif // GUI_H
Wäre super, wenn mir da jemand helfen könnte! Wie gesagt, der Fehler tritt nicht nur beim Button auf, sondern z.B. auch bei listClients->addColumn("bla"); und anderen eigentlich vorhandenen Funktionen...

Danke schon mal!
gehho

Verfasst: 18. Juni 2006 01:32
von ChMaster
servus,

wenn ich dich richtig verstanden habe, hast du mit dem designer
eine gui erstellt und möchtest die nun verwenden, sind in der gui
auch buttons? wenn ja dann geh so vor ( Qt4 ):

deine GUI.ui ableiten in dem du es so machst (header) servergui.h:

Code: Alles auswählen

/* deine GUI.ui header datei, wird vom uic erzeugt */
#include "ui_GUI.h"

/* Qt4 include files  -  anpassen da dies alles von qt includiert was mit gui und core zu tun hat */
#include <QtCore>
#include <QtGui>
/*
 * Ui::UiGUI anpassen, zb.: Ui::SeverUi
 * der name SeverUi kommt aus deinem Widget
 * und ist der Name deinens Widgets
 */
class ServerGui : public QWidget, public Ui::UiGUI
{
    Q_OBJECT
    
    public:
        ServerGui( QWidget *parent = 0, Qt::WFlags flags = 0 );
        ~ServerGui();

    private slots:
        /* hier deine benötigten slots rein usw. 
         * zb: void slotlogIntoServer();
         */
         void slotlogIntoServer();
    protected:
        void closeEvent( QCloseEvent *e );
};

(source) servergui.cpp:

Code: Alles auswählen

/* Includiert servergui.h */
#include "servergui.h"

/* Qt4 include files - wieder anpassen*/
#include <QtGui>
#include <QtCore>

ServerGui::ServerGui( QWidget *parent, Qt::WFlags flags ) : QWidget( parent, flags )
{
        /* GUI.ui Initialisieren bzw. alle Elemente in dem GUI Widget */
        setupUi( this );
        /* Connectioon herstellen */
        connect( btnServerStart, SIGNAL( clicked() ), this, SLOT( logIntoServer() ) );
}

ServerGui::~ServerGui()
{}

void ServerGui::closeEvent( QCloseEvent *e )
{
    e->accept();
}

void ServerGui::logIntoServer()
{
    /* auf eigene verantwortung ;)*/
    btnServerStart->setEnabled(false);
}

wenn du mit Qt3 arbeitest musst du in deine ServerGUI.cpp #include <qpushbutton.h> einfügen,
wenn du mit Qt4 arbeitest musst du in deine ServerGUI.cpp #include <QPushButton> einfügen.

dann wird er setEnabled(true) kennen ...