Seite 1 von 1
[gelöst]2ter Dialog, seltsame Fehlermeldung
Verfasst: 17. März 2010 20:44
von textmitfunktion
Hallo,
auch eigentlich eine newbie-Frage denke ich mal.
Ich will meiner Anwendung einen 2ten Dialog zuschalten (durch klick auf Menüpunkt).
Ich hab es versucht über die single-inheritance-approach:
http://qt.nokia.com/doc/4.5/designer-us ... e-approach.
Dazu habe ich über QCreator und QDesigner *.ui & *.h Datei erzeugen lassen und aus dem Tutorial die Zeilen eingebaut. Beim compile meckert er jedoch in Datei *.h :
Code: Alles auswählen
*.h:19: error: 'SettingsForm' in namespace 'Ui' does not name a type
in der Zeile die im Tutorial so lautet:
Und die ich in meiner App natürlich von "CalculatorForm" zu "SettingsForm" angepasst habe.
Nochwas, in der *.h meiner Hauptapplikation steht noch der folgende Teil. Hat es damit etwas auf sich? Im Tutorial taucht das nicht auf. Und meine versuche das in meinem neuen Dialog reinzufrimeln sind nicht gefruchtet.
viele Grüße
Verfasst: 17. März 2010 23:41
von textmitfunktion
OK,
War es doch. Das hab ich jetzt in meine *.h eingefügt. Der Fehler kommt nicht mehr. Jetzt meckert der compiler nur noch an einer Stelle! (wow

)
Nämlich in der Klassendefinition der Klasse "SettingsForm"
mit den Worten:
wenn ich aus meiner MainApplikation klaue das die dort an der selben Stelle
ui als einen Pointer setzen, nämlich so:
kommt nur wieder eine andere Meldung:
Code: Alles auswählen
main.cpp:32: error: request for member 'setupUi' in '((SettingsForm*)this)->SettingsForm::ui', which is of non-class type 'Ui::SettingsForm*'
beim Aufruf in der MainAplication
Verfasst: 18. März 2010 07:57
von archer
Hallo,
die Vorwärtsdeklaration
geht nur bei Referenzen und Zeigern.
Wenn du in einer header die Definition
hast, kannst du die Vorwärtsdeklaration machen. Dann mußt du aber in der cpp Datei auch ein #include setzen:
Das ist der Name der Header-Datei die aus dem ui-File entstanden ist. Kann bei die natürlich auch anders heißen.
Außerdem im im Konstrukter:
Verfasst: 18. März 2010 18:13
von textmitfunktion
Hi Archer, Danke für Deine Mühe.
Bis zur folgenden Zeile hab ic halles so wie Du sagtest schon und das Programm murrt nicht herum beim compilieren. Aber sobalt ich Dein:
Code: Alles auswählen
SettingsForm::SettingsForm(QWidget *parent) :
QWidget(parent)
{
//ui.setupUi(this);
ui = new Ui::SettingsForm;
ui->setupUi(this);
}
In meiner *.cpp der Hauptapplikation einfüge meint er:
Code: Alles auswählen
checkini.cpp:32: error: invalid use of incomplete type 'struct Ui::SettingsForm'
Muss ich ein eigene *.cpp dafür anlegen und die in meiner applikation.cpp einbinden?
Und ist es Problematisch das zwei mal
Ui in der gleichen *.cpp eingebunden werden ?
Code: Alles auswählen
//MainFunction starts //
checkini::checkini(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::checkini)
{
ui->setupUi(this);
createActions();
createMenus();
}
checkini::~checkini()
{
delete ui;
}
SettingsForm::SettingsForm(QWidget *parent) :
QWidget(parent)
{
//ui.setupUi(this);
ui = new Ui::SettingsForm;
ui->setupUi(this);
}
vielen Dank
Verfasst: 19. März 2010 09:22
von archer
Also bei mir besthet ein Dialog immer aus einer header-Datei und einer cpp-Datei und bei Bedarf noch aus einer ui-Datei.
So ganz vestehe ich auch nicht was du eigentlich gemacht hast.
Mein Vorschlag:
Mach deinen checkini-Dialog mit einer eigene h, cpp und ui und deinen SettingsForm-Dialog ebenfalls mit einer eigenen h, cpp und ui.
Das schafft Übersicht und ist Sauber.
Verfasst: 19. März 2010 09:51
von textmitfunktion
archer hat geschrieben:Also bei mir besthet ein Dialog immer aus einer header-Datei und einer cpp-Datei und bei Bedarf noch aus einer ui-Datei.
Bei mir auch.
In meiner MainApp hab ich alles soweit es ging im QCreator und QDesigner per wizard erstellen lassen und nur noch meine Funktionen in die GUI eingebaut.
Den 2ten Dialog hab ich nicht durch den Wizard erstellen lassen (das werd ich heute Abend nochmal probieren), sondern durch rechtsklick auf das ui file und dort dann "hinzufügen" ausgewählt. das Gleiche für die .h und .cpp Datei.
So ganz vestehe ich auch nicht was du eigentlich gemacht hast.
Mein Vorschlag:
Mach deinen checkini-Dialog mit einer eigene h, cpp und ui und deinen SettingsForm-Dialog ebenfalls mit einer eigenen h, cpp und ui.
Das schafft Übersicht und ist Sauber.
So habe ichs ja. Ich hab beim 2ten Dialog immer versucht mich genau an die Stucktur zu halten wie der Wizard sie für meine MainApp erzeugt hat.
Naja, ich Danke Dir auf jeden Fall erstmal. Und probiere es Abend nochmal mit dem Wizard. Wenn das nichts bringt. setzt ich mein Projekt mal hier rein.
VG
Verfasst: 19. März 2010 09:58
von archer
Hat den deine SettingsForm, d.h. die ui, auch den Objektnamen (nicht der Dateiname) SettingsForm bekommen?
Verfasst: 19. März 2010 12:26
von textmitfunktion
Hm, gute Frage. Wo stellt man das ein? Ich habs glaube ich nicht explizit angegeben.
Edith: ..hab ich jetzt gefunden. Es hieß noch "Form"
EXIT
Verfasst: 19. März 2010 20:00
von textmitfunktion
Ich glaub ich gebe gleich auf :-/ "allet Scheisse" .. hät ich fast gesagt. Ich glaub mal ich hab jetzt alles an dem Projekt kaputt gespielt.
Könnte bitte jemand mal eine kurze verbale Beschreibung abgeben welche Schritte einzeln nötig sind um zu meiner funktionierenden Application einen weiteren Dialog hinzuzufügen? Die Hauptapplication hat bereits eine .ui eine .h und 2 .cpp Dateien. Eine davon ist meine checkini.cpp und die andere ist die main.cpp vom Wizard in der nur folgendes steht:
Code: Alles auswählen
#include <QtGui/QApplication>
#include "checkini.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
checkini w;
w.show();
return a.exec();
}
Oder gibts schon dieses Howto oder Tutorial nach dem ich suche? (Weil ich hab in den letzten Tagen keines gefunden. Entweder beziehen die sich nur auf einen Dialog oder es wird im Rahmen eines großen Projektes ein zweiter Dialog erzeugt wo ich aber nicht mehr durchsehe wie ich das auf mein Projekt adaptieren kann)
Ich verwende übrigens: Qt SDK for Windows, mit Creator 1.3.1 und QT 4.6
Danke und viele Grüße
Verfasst: 19. März 2010 20:57
von Christian81
Ein zweiter Dialog wird genauso erstellt wie der erste. Den Namen des Dialogs (und damit auch den Variablennamen mit dem man den Dialog anspricht) stellt man im Designer ein (Objektname des Dialogs).
Verfasst: 20. März 2010 23:18
von textmitfunktion
YEAH! Endlich.
Ich hatte das selbe Problem wie der hier:
http://www.qtforum.de/forum/viewtopic.php?t=8561
in der single-inheritance-approach ist die Rede von QWidget aber bei Dialogen muss man QDialog verwenden.
Klingt logisch, aber muss man erstmal drauf kommen.
merci