doppelvererbung wegen .ui file funktioniert nicht.

Verschiedenes zu Qt
Antworten
RED Squirrel
Beiträge: 50
Registriert: 3. Februar 2007 22:21

doppelvererbung wegen .ui file funktioniert nicht.

Beitrag 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
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag 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...
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag 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.
RED Squirrel
Beiträge: 50
Registriert: 3. Februar 2007 22:21

Beitrag 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
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag 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?
RED Squirrel
Beiträge: 50
Registriert: 3. Februar 2007 22:21

Beitrag 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?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Das Signal kann nicht mit diesem Slot verbunden werden und auf der Konsole sollte auch eine entsprechende Meldung erscheinen...
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Das stimmt text() ist kein Slot...
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Re: doppelvererbung wegen .ui file funktioniert nicht.

Beitrag 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.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
Antworten