Eigene Variablen kennt er nicht in der .ui.h

Alles rund um die Programmierung mit Qt
Antworten
jobe
Beiträge: 6
Registriert: 1. März 2006 18:58
Kontaktdaten:

Eigene Variablen kennt er nicht in der .ui.h

Beitrag von jobe »

Hi!
Ich verzweifel grad daran, ganz einfach eingene Variablen in einer Klasse zu benutzen.
Ich habe die Dateien mainwindow.h mainwindow.cpp und mainwindow.ui.h, die zu einem mit dem Designer erstellten Dialog gehören:

mainwindow.h

Code: Alles auswählen

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <qvariant.h>
#include <qdialog.h>
#include <qhttp.h>

class QVBoxLayout;
class QHBoxLayout;
// (...)

class MainWindow : public QDialog
{
    Q_OBJECT

public:
    MainWindow( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
    ~MainWindow();

    QLabel* textLabel1;
    QLineEdit* line_server;
   // (...)

public slots:
    virtual void startButtonClicked();
    virtual void httpRequestFinished( int requestId, bool error );

protected:
    QVBoxLayout* layout12;
    // (...)

protected slots:
    virtual void languageChange();

// ---> Meine Variablen: <---
private:
    QHttp http;
    int httpGetId;
};

#endif // MAINWINDOW_H
mainwindow.cpp

Code: Alles auswählen

#include "mainwindow.h"

#include <qvariant.h>
// (...)


#include "mainwindow.ui.h"
/*
 *  Constructs a MainWindow as a child of 'parent', with the
 *  name 'name' and widget flags set to 'f'.
 *
 *  The dialog will by default be modeless, unless you set 'modal' to
 *  TRUE to construct a modal dialog.
 */
MainWindow::MainWindow( QWidget* parent, const char* name, bool modal, WFlags fl )
    : QDialog( parent, name, modal, fl )
{
    // (...)
}

/*
 *  Destroys the object and frees any allocated resources
 */
MainWindow::~MainWindow()
{
    // no need to delete child widgets, Qt does it all for us
}

/*
 *  Sets the strings of the subwidgets using the current
 *  language.
 */
void MainWindow::languageChange()
{
  // (...)  
}
mainwindow.ui.h

Code: Alles auswählen

void MainWindow::startButtonClicked()
{
    // Problemstelle --->
    http.setHost( line_server->text() );
    httpGetId = http->get( line_file->text() );
}


void MainWindow::httpRequestFinished( int requestId, bool error )
{

}
Wenn ich das jetzt so kompilieren will, bekomme ich folgende Fehler:
qmake -o Makefile qtonlineviewer.pro
g++ -c -pipe -Wall -W -march=k8 -O2 -pipe -DQT_NO_DEBUG -DQT_SHARED -DQT_TABLET_SUPPORT -DQT_THREAD_SUPPORT -I/usr/qt/3/mkspecs/linux-g++ -I. -I/usr/qt/3/include -I.ui/ -I. -I.moc/ -o .obj/mainwindow.o .ui/mainwindow.cpp
In file included from .ui/mainwindow.cpp:23:
.ui/../mainwindow.ui.h: In member function `virtual void MainWindow::startButtonClicked()':
.ui/../mainwindow.ui.h:16: Fehler: »http« nicht deklariert (erste Verwendung dieser Funktion)
.ui/../mainwindow.ui.h:16: Fehler: (Jeder nicht deklarierte Bezeichner wird nur einmal für jede Funktion, in der er vorkommt, gemeldet.)
.ui/../mainwindow.ui.h:17: Fehler: »httpGetId« nicht deklariert (erste Verwendung dieser Funktion)
.ui/../mainwindow.ui.h: At global scope:
.ui/../mainwindow.ui.h:22: Warnung: nicht benutzter Parameter »requestId«
.ui/../mainwindow.ui.h:22: Warnung: nicht benutzter Parameter »error«
make: *** [.obj/mainwindow.o] Fehler 1
Warum? Der müsste die doch kennen.

Wenn ich die kritischen Zeilen

Code: Alles auswählen

http.setHost( line_server->text() );
    httpGetId = http->get( line_file->text() );
in eine Funktion in der mainwindow.cpp packe, dann funktionierts komischerweise.

Wo liegt denn da der Fehler?
madRenEGadE
Beiträge: 52
Registriert: 10. Februar 2006 15:15

Beitrag von madRenEGadE »

so wie es aussieht musst du die mainwindow.h erst in der mainwindow.ui.h einbinden der compiler weiß ja nich wenn er die ui.h kompiliert das es die variablen woanders gibt

warum ist die mainwindow.ui.h überhaupt eine eigene datei mach den code doch mit in die mainwindow.cpp dort gehört er nämlich meiner meinung nach hin!

hoffe das hilft
jobe
Beiträge: 6
Registriert: 1. März 2006 18:58
Kontaktdaten:

Beitrag von jobe »

Die mainwindow.h wird inder .cpp vor der .ui.h includiert. Dann sollte der die doch eigentlich schon kennen.
Das mit der .ui.h macht der Designer selbst, wenn man neue Slots erstellt.
Wenn ich die Funktionen aus der .ui.h in die .cpp reintu gibts undefined references beim linken.
madRenEGadE
Beiträge: 52
Registriert: 10. Februar 2006 15:15

Beitrag von madRenEGadE »

Die mainwindow.h wird inder .cpp vor der .ui.h includiert.Dann sollte der die doch eigentlich schon kennen.
ne oda haste schon mal probiert alle dateien in der main zu includieren? das funzt auch nich
jobe
Beiträge: 6
Registriert: 1. März 2006 18:58
Kontaktdaten:

Beitrag von jobe »

Jetzt hab ich ne Lösung gefunden. Man muss einfach den Object Explorer verwenden, dann klappt auch alles mit den Variablen :roll:
Trotzdem Danke!
Antworten