.h File wird nicht hergestellt

Verschiedenes zu Qt
Antworten
MatthieuRiolo
Beiträge: 28
Registriert: 13. März 2005 09:21

.h File wird nicht hergestellt

Beitrag von MatthieuRiolo »

Guten tag zusammen
Ich fange gerade neu an mit QT4. Leider hab ich das problem das die .h File nicht aus dem .ui hergestellt wird. Habs auch schon versucht mit einer leeren Datei wo er reinschreiben sollte...

An was kann das liegen? Hab ich die .profile datei falsch beschrieben?

Und noch eine frage, als ich es installiert habe war mein Ordner auf dem Desktop. Nun kann ich den dort ned wegschieben weil er dann seine programme nicht mehr findet :( Muss ich da auch die .profile Datei umkrempeln?

Danke vielmal

PS: Nutze Mac OS X3.9
Es fällt mir nichts ein
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Dann zeige uns doch mal, was in deiner Profatei steht.
MatthieuRiolo
Beiträge: 28
Registriert: 13. März 2005 09:21

Beitrag von MatthieuRiolo »

######################################################################
# Automatically generated by qmake (2.00a) Sat Oct 1 01:28:20 2005
######################################################################

TEMPLATE = app
TARGET +=
DEPENDPATH += .
INCLUDEPATH += .

# Input
HEADERS += startup.h
FORMS += startup.ui
SOURCES += main.cpp startup.cpp
Spielt das eine rolle? Die wird ja nicht von mir hergestellt und sollte auch nicht fehlerhaft sein ...


PS: Dieses programmlein hab nicht ich geschrieben -> stimmt also
Es fällt mir nichts ein
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

also sollte die .h Datei den Namen ui_startup.h haben.
kannst du mal die ca. 1. 10 Zeilder der UI datei sowie der Datie wo diese denn eingebunden werden soll zeigen?
MatthieuRiolo
Beiträge: 28
Registriert: 13. März 2005 09:21

Beitrag von MatthieuRiolo »

BartSimpson hat geschrieben:also sollte die .h Datei den Namen ui_startup.h haben.
kannst du mal die ca. 1. 10 Zeilder der UI datei sowie der Datie wo diese denn eingebunden werden soll zeigen?
ui_startup.h? Nicht eher nur startup.h?

Code: Alles auswählen

<ui version="4.0" >
 <author>Martin Brehme</author>
 <comment></comment>
 <exportmacro></exportmacro>
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow" >
  <property name="geometry" >
   <rect>
    <x>0</x>
    <y>0</y>
....

Code: Alles auswählen

#include <QtGui/QtGui>
#include <startup.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
	QApplication app(argc,argv);
	app.setQuitOnLastWindowClosed(true);
	app.setStyle("plastique");

	StdBase * base = new StdBase;
	base->show();

	return app.exec();
}
Es fällt mir nichts ein
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

nein die Datei die der uic erstellt heist in deinem Fall ui_startup.h!!
und in der Hauptdatei hat die nix verlohren!!
denn die Oberfläche scheint ja im Objekt StdBase zu sein. wie sieht denn dort die h. und der Konstruktor in der cpp Datei aus?
MatthieuRiolo
Beiträge: 28
Registriert: 13. März 2005 09:21

Beitrag von MatthieuRiolo »

BartSimpson hat geschrieben:nein die Datei die der uic erstellt heist in deinem Fall ui_startup.h!!
und in der Hauptdatei hat die nix verlohren!!
denn die Oberfläche scheint ja im Objekt StdBase zu sein. wie sieht denn dort die h. und der Konstruktor in der cpp Datei aus?
an was siehst du das es ui_startup.h heisst? Ich seh da nur HEADERS += startup.h ....

Code: Alles auswählen

#ifndef STD_BASE_H
#define STD_BASE_H

#include <ui_startup.h>

class StdBase : public QMainWindow, private Ui::MainWindow { 
Q_OBJECT

public:
	StdBase(QWidget *parent = 0);

protected:
	
private slots:
	void on_pb_wettkampf_clicked();

private:
	
};

#endif

Code: Alles auswählen

#include "startup.h"
#include "QMessageBox"

StdBase::StdBase(QWidget *parent){
	setupUi(this);
}

void StdBase::on_pb_wettkampf_clicked(){
	QMessageBox::information(0, "XYZ - Linux Edition",QString("Wettkampfmodul noch nicht verf?gbar!"));
}
Es fällt mir nichts ein
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

du hast mehre Fehler drinn.
Solltest du eine saubere Trennung zwischen der UI aus dem Dessiner und der Klasse die diese denn Benutzte. Es könnte z.b so aussehen:
Das Objekt in der .ui Datei heist statt MainWindow HauptBasis
Dann heist Dein Hauptdialog. z.b DlgHaupt oder so.
Denn so wie du das jetzte benannt hast geht das nicht. Im Forum hatte jemand es ähnlich wie du versucht. Anbei ein kuzes beispiel wie esbesser währe.
MatthieuRiolo
Beiträge: 28
Registriert: 13. März 2005 09:21

Beitrag von MatthieuRiolo »

QT4 ist mir nicht mehr so geheuer :? QT3 wär irgendwie schöner... egal. Werde das ganze nochmal anschauen. Ich habe noch das problem das alle meine QT tools auf dem Desktop sind. Diese möchte ich aber System/Developer/qt-mac-opensource-src-4.0.1 haben. In der .profile steht im moment das
##
# DELUXE-USR-LOCAL-BIN-INSERT
# (do not remove this comment)
##
echo $PATH | grep -q -s "/usr/local/bin"
if [ $? -eq 1 ] ; then
PATH=$PATH:/usr/local/bin
export PATH
fi

PATH=/usr/local/Trolltech/Qt-4.0.1/bin:$PATH
export PATH
Dies verlink irgendwie auf diesen Ordner auf dem Desktop. Sehe aber überhaupt ned wo... :/ ich glaube eher das ich alles neu installieren muss :'(
Es fällt mir nichts ein
methusalem
Beiträge: 186
Registriert: 11. August 2005 08:21

Beitrag von methusalem »

Hallo zusammen,

vorweg eins ... der Code ist von mir. Ich habe ihn schnell zusammenkopiert und ihn per Mail an den OP geschickt. Bei mir läßt sich das ganze problemlos kompilieren!
BartSimpson hat geschrieben:du hast mehre Fehler drinn.
Ich bin ja bereit zu lernen! Daher wäre es super, wenn du mir sagst welche Fehler ich gemacht habe!
Solltest du eine saubere Trennung zwischen der UI aus dem Dessiner und der Klasse die diese denn Benutzte.
Das war aber gar nicht die Absicht dieser Klassenhirarchie. Es ging viel mehr darum, die Klasse, die vom Designer erstellt wird (ui_xyz.h) um eigene Slots & Methoden zu erweitern. Und zwar ohne das ich in der automatisch generierten Klasse herumeditiere. Diese Änderungen gingen ja beim nächsten bearbeiten mit dem Designer verloren.
D.h. nach meinem Verständniss, das ich eine neue Klasse erstelle, die von dieser - vom Designer erstellten Klasse - abgeleitet ist.
Wenn ich dein Beispiel richtig lese, hast du in einer neuen Klasse ein Objekt der Designerklasse erstellt. Ich kann zwar nun dieses Objekt nutzen, wenn ich dort aber neue Slots oder Methoden hinzufügen möchte, geht das über deinen Weg nicht.
Das nette an QT4 ist ja dieses automatische konnektieren von Signalen mit Slots in dem ich eine Methode nach folgendem Muster schreibe:

Code: Alles auswählen

void on_Objektname_Signal();
z.B.:
void on_pb_wettkampf_clicked();  
Wobei pb_wettkampf ein Pushbutton der GUI ist (also in der ui_xyz.h definiert ist). In deinem Beispiel kann ich das nicht realisieren, da deine Klasse nicht von der Designerklasse abgeleitet ist. Wenn doch, sag mir bitte wie?

Versteh mich nicht falsch! Es ist sehr gut möglich, das ich Fehler gemacht habe. Aber wir wollten vermutlich auch unterschiedliche Dinge realisieren.
Martin
klogg
Beiträge: 129
Registriert: 5. September 2005 17:00
Wohnort: Hann. Münden

Beitrag von klogg »

Hmm... hier ist alles ein wenig durcheinander :)

Vielleich hilft dir folgender Überblick:

1. Du erstellst im Designer ein hübsches Fenster.
Jetzt willste natürlich, dass das einen start() Slot kriegt.
Das Fenster nennste im Designer MyWindowD (D für Designer)
Das speicherst du unter MyWindowD.ui

2. Jetzt erstellst du eine eigene Klasse, die nennst du MyWindow.
#include "ui_WindowD.h" (damit qmake bescheid weiß)

3. Eine Möglichkeit ist jetzt, ein Element des Typs Ui::MyWindowD zu erstellen.
z.B. private: Ui::MyWindowD basicui
Da alle vom Designer eingebauten Objekte public sind,
kannst du ganz einfach mit basicui.pushButton_start->clicked()
auf die Signale und alles zugreifen, kannst jezt also den Startknopf
mit einem eigenen Slot verbinden.

4. Du kannst aber auch deine Klasse MyWindow von Ui::MyWindowD erben lassen.
Dann enthälst du eben selber den pushButton_start und fertig.


Ich hoffe, das hilft dir weiter...

HENNING

PS: Du kannst die Namen wählen wie du willst. Nur die, die gleich sein müssen, müssen gleich sein :wink:
methusalem
Beiträge: 186
Registriert: 11. August 2005 08:21

Beitrag von methusalem »

klogg hat geschrieben: ...
3. Eine Möglichkeit ist jetzt, ein Element des Typs Ui::MyWindowD zu erstellen.
z.B. private: Ui::MyWindowD basicui
Da alle vom Designer eingebauten Objekte public sind,
kannst du ganz einfach mit basicui.pushButton_start->clicked()
auf die Signale und alles zugreifen, kannst jezt also den Startknopf
mit einem eigenen Slot verbinden.
OK, so hab ich das nie betrachtet. Für mich ist das auch ein wenig "von hinten durch die Brust ins Auge". Ist aber meine Meinung.
klogg hat geschrieben: 4. Du kannst aber auch deine Klasse MyWindow von Ui::MyWindowD erben lassen.
Dann enthälst du eben selber den pushButton_start und fertig.
Und genau das war mein Ansatz. Vielleicht nicht ganz sauber auf die schnelle, aber es scheint ja zu funktionieren ...
klogg hat geschrieben: Ich hoffe, das hilft dir weiter...

PS: Du kannst die Namen wählen wie du willst. Nur die, die gleich sein müssen, müssen gleich sein :wink:
Ja, danke! Und der Spruch ist gut ... :-)
Martin
klogg
Beiträge: 129
Registriert: 5. September 2005 17:00
Wohnort: Hann. Münden

Beitrag von klogg »

Ich mag den Vererbungsansatz auch lieber.
Den finde ich auch keineswegs unsauber oder so...
Meine Meinung ist, dass alle Elemente irgendwie gleichberechtigt sind.
Und wenn ich (als Klasse) eigentlich das Ding sein will,
was mit dem Designer erstellt wurde, dann erbe ich eben davon.

Wenn man dann noch mit den ganzen Objekten jongliert,
geht einem der Aufruf mit element.objekt->methode() schnell auf die Neren.
Ansonsten ist der Unterschied meiner Meinung nach minimal.

Jeder sollte das einfach so machen, wie ihm das gefällt.
Das wichtigste ist nämlich, das jeder versteht, was er da macht.

Also viel Spaß mit QT :lol: :lol: :lol:

HENNING
Antworten