Seite 1 von 1

doppelvererbung wegen .ui file funktioniert nicht.

Verfasst: 11. April 2007 11:47
von RED Squirrel
hallo!


in einem QT Buch wird erklärt, wie ich mittels einem .ui File ein Programm im Designer "zeichnen" kann, und es anschließend aber in einer normalen IDE verwenden kann.

Im Grunde muss ich einige connections einbauen. Doch das will irgendwie nicht hinhauen.

Ich bekomme zwar keine Fehermeldungen, aber funktionieren,tut es auch nicht.

hier einmal der code:

main.cpp

Code: Alles auswählen

#include <QApplication>
#include <QWidget>

#include "ui_main_window.h"




int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    Ui::main_window ui;
    QMainWindow *window = new QMainWindow;

    ui.setupUi(window);
    window->show();
    
    return app.exec();
}
main.h

Code: Alles auswählen

#ifndef MAIN_H
#define MAIN_H

#include <QWidget>

#include "ui_main_window.h"

class main_window : public QMainWindow, public Ui::main_window
{
      Q_OBJECT
public:
     main_window(QWidget *parent = 0);

private slots:
        
};

#endif
physic.cpp (hier funktioniert das connect nicht)

Code: Alles auswählen

#include <QApplication>
#include <QWidget>

#include "main.h"

main_window::main_window(QWidget *parent) : QMainWindow(parent)
{
    setupUi(this);

    
  connect(kmh_button_2, SIGNAL(clicked()), kmh_ms_lineedit_2, SLOT(text()));
}    
ui_main_window.h
Die riesige Datei, die ausder .ui Datei generiert wurde.


ich glaube, dass irgendwas in der main.h datei nicht stimmt, und ich deshalb irgendwie nicht von 2 Klassen erbe, sondern nur von einer oder so.

lg. RED

Verfasst: 11. April 2007 13:37
von lepsai
es soll heißen:

Code: Alles auswählen

#include "main.h" 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

    main_window* mainWidget = new main_window(); 
    mainWidget->show(); 
    
    return app.exec(); 
}
alles andere ist korrekt...

Verfasst: 11. April 2007 13:39
von lepsai
In deiner vorheriger Variante hattest du die Instanz der Klasse main_window gar nicht angelegt. Im Konstrutor von main_window passierte aber das connect von Signalen und auch setupUi() übrigens.

Verfasst: 11. April 2007 14:34
von RED Squirrel
hmmm... es geht noch immer nicht...

also eigentlich hat sich an der .exe datei nichts geändert.

Es schaut jetzt vom code her, viel richtiger aus, aber das ist auch schon die einzige änderung.

stimmt denn physic.cpp ?
da hab ich eigentlich ziemlich viel zusammengeschustert...

danke & lg.
RED

Verfasst: 11. April 2007 14:38
von lepsai
ah, jetzt sehe ich 's: Was willste eigentlich erreichen? Die Verbindung zwischen clicked() und text() macht überhaupt keinen Sinn!

Was soll denn passieren?

Verfasst: 11. April 2007 14:51
von RED Squirrel
das war ein test, ob es funktioniert.

Ich wollte einfach, wenn ich auf den Button klicke, dass dann der Text verschwindet.

im späteren verlauf will ich, dass ich den Wert aus einem lineEdit hole, und dann entweder mal 3.6, oder durch 3.6 nehme.

Das werde ich in einer externen Funktion machen.

was ist denn eigentlich daran jetzt falsch?

Verfasst: 11. April 2007 19:00
von upsala
Das Signal kann nicht mit diesem Slot verbunden werden und auf der Konsole sollte auch eine entsprechende Meldung erscheinen...

Verfasst: 11. April 2007 20:01
von lepsai
Das stimmt text() ist kein Slot...

Re: doppelvererbung wegen .ui file funktioniert nicht.

Verfasst: 11. April 2007 22:13
von Volker
Also Punkt 1: Wenn Du eine Klasse schreibst, solltest Du die Datei so nennen wie die Klasse und die Header Datei entsprechend. Wenn Deine Klasse main_window heissen soll, sollten Deine Dateien auch entsprechend main_window.cpp und main_window.h heißen.
Bzgl. Klassennamen und solchen Dingen hilft Dir vielleicht auch
http://www.uni-koblenz.de/~daniel/Namen ... ionen.html
weiter.
RED Squirrel hat geschrieben:

Code: Alles auswählen

#ifndef MAIN_H
#define MAIN_H

#include <QWidget>

#include "ui_main_window.h"

class main_window : public QMainWindow, public Ui::main_window
{
      Q_OBJECT
public:
     main_window(QWidget *parent = 0);

private slots:
        
};
#endif
Was mir hier noch spontan auffällt, ist dass zu mindest bei mir der UI Compiler kein Namespace Ui erzeugt. Statt dessen kommt wenn ich in der Ui Datei das Widget main_window genannt habe eine Klasse Ui_main_window heraus. Aber mag sein, dass Du mit einer andern (Qt3 ?) Version arbeitest wo das anders ist.