Diskussion:Qt für C++ Anfänger: Das Grundgerüst

Seiteninhalte werden in anderen Sprachen nicht unterstützt.
Aus Wikibooks

Bei Fragen bitte per e-mail melden. Ist nicht wirklich ein Diskussionsforum für diese Probleme hier.



schlechtes tutorial. ich habe nix verstanden.

___________________________________________________

Naja, bei mir geht es eigentlich, man muss sich eben mit C++ schon ein wenig beschäftigt haben, ich habe aber das Problem, dass sich die ui_Taschenrechner.h nicht selbst erstellt hat, sodass mir das Tutorial insofern nichts gebracht hat

___________________________________________________

Beim make bekam ich einige Fehlermeldungen. Kenne mich noch nicht gut genug aus um diese sofort zu beheben. Schade bis zu diesem Punkt fande ich das Tutorial echt gut.

Hier der Auszuge aus der Fehlermeldungen:

Taschenrechner.h:8: error: expected class-name before ‘,’ token <br>
Taschenrechner.h:8: error: ‘Ui’ has not been declared<br>
Taschenrechner.h:8: error: expected `{' before ‘MainWindow’<br>
Taschenrechner.h:8: error: function definition does not declare parameters<br>
main.cpp: In function ‘int main(int, char**)’:<br>
main.cpp:7: error: ‘QApplication’ was not declared in this scope<br>
main.cpp:7: error: expected `;' before ‘a’<br>
main.cpp:8: error: aggregate ‘Taschenrechner w’ has incomplete type and cannot be defined<br>
main.cpp:10: error: ‘a’ was not declared in this scope<br>
main.cpp: At global scope:<br>
main.cpp:6: warning: unused parameter ‘argc’<br>
main.cpp:6: warning: unused parameter ‘argv’<br>
make: *** [main.o] Error 1<br>

[yo-chen]: die Fehlermeldung ueber diesem Text hatte ich auch, obwohl ich das gemacht habe, was im Tutorial stand. Bei mir war die Ursache, dass ich sowohl qt3 und qt4 auf meinem System installiert hatte und qmake automatisch die Version 3 gewaehlt hatte. Einfach als superuser unter "update-alternatives --config qmake" die richtige Version raussuchen hat das Problem behoben (Achtung die Aenderung ist systemweit). Falls ihr dasselbe Problem habt, sollte dies allerdings in der Zeile ueber der Fehlermeldung (die Zeile, die den Makefile Befehl angibt) sichtbar sein (da muesste dann etwas von qt3 stehen) Ansonsten waere noch zu beachten, wirklich den QT-4 Designer zu starten :) [/yo-chen]

Hi Leute, ihr müsst dem Tutorial schon folgen. Die Voraussetzung für das Tutorial ist es, in C++ Anfänger zu sein. Kommt also selbst erstmal an den Punkt, wo ihr euch als "Anfänger" bezeichnet. Die obigen Fehlermeldungen kommen daher, dass ihr die Ui-Sachen nicht gemacht habt. Üben, üben, üben ;-) Tandar 10:07, 18. Feb. 2009 (CET)[Beantworten]
ich hatte den selben fehler. möchte aber eher versuchen konstruktive lösungsansätze zu bieten, anstadt auf anfängern "rumzuhacken".

Tatsächlich klappt es, wenn man das tutorial genau befolgt. Zitat: "(als Template bitte Main Window wählen)".

________________________________________________________________________

hallo,

ich hab das Tutorial soweit befolgt wie hier angegeben, allerdings kommt bei mir bei der Eingabe von "make" folgende Ausgabe in der Konsole:

eloars@eloars:~/Desktop/Taschenrechner$ qmake -project
eloars@eloars:~/Desktop/Taschenrechner$ qmake
eloars@eloars:~/Desktop/Taschenrechner$ make
g++ -c -pipe -fpermissive -g -Wall -W -D_REENTRANT -DQT_SHARED -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include
/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o main.o main.cpp
In file included from main.cpp:1:
Taschenrechner.h:6: Fehler: expected class-name before »,« token
Taschenrechner.h:6: Fehler: expected class-name before »{« token
Taschenrechner.h:10: Fehler: expected `)' before »*« token
main.cpp: In function »int main(int, char**)«:
main.cpp:7: Fehler: »class Taschenrechner« hat kein Element namens »show«
make: *** [main.o] Fehler 1
eloars@eloars:~/Desktop/Taschenrechner$ ./Taschenrechner
bash: ./Taschenrechner: No such file or directory


Wenn ich das richtig verstehe erkennt er meine Klasse nicht richtig..., ich habe allerdings genau den Text des Tutorials übernommen:

".... class Taschenrechner : public QMainWindow, public Ui::MainWindow{ Q_OBJECT ..."

kann mir vielleicht jemand sagen wo der Fehler liegen könnte? Habe ich vielleicht einfach nur QT4 nicht richtig installiert? Danke schonmal für eure Hilfe Raphael

public Ui::MainWindow - heißt dein QMainWindow, das du mit designer erstellt hast, auch wirklich MainWindow? Das musst du anpassen. --91.21.103.210 18:13, 20. Mär. 2011 (CET)[Beantworten]

kurzschreibweise?[Bearbeiten]

Hallo, ich komme von Java und möchte jetzt mal C++ und weils so schön ist gleich Qt ausprobieren. Bis jetzt läuft alles prima, ich bin mir nur mit der Syntax noch nicht ganz sicher. Also dachte ich mir, ich frag mal:

Ist QApplication a(argc, argv); eine Art Kurzschreibweise für QApplication a = new QApplication(argc, argv); (Ich weiß, dass es - wäre es Java - das bedeuten würde, aber wie gesagt, in C++ bin ich syntax-mäßig noch nicht ganz sattelfest...)

Nein, dass sind zwei sehr unterschiedliche Sachen. QApplication a(argc, argv); erzeugt ein komplettes Objekt auf dem Stack, QFoo* pFoo = new QFoo(argc, argv); dagegen erzeugt das Objekt auf dem Heap und lässt pFoo drauf zeigen. Letzteres kommt also dem Java-new deutlich näher. Erfahrungsgemäß ist das ein steiniger Weg, C++ en passant zu lernen. --84.131.156.3 19:54, 25. Mai 2009 (CEST)[Beantworten]
Wenn man in C++ ein Objekt (oder auch eine normale Variable) mit Klasse* Objektptr = new Klasse erstellt muss man es aber anders als bei Java auch wieder selbst mit delete Objektptr löschen, damit keine Speicherlöcher entstehen. --Funcoder 11:26, 21. Nov. 2009 (CET)[Beantworten]

Erläuterung zu Ui::MainWindow[Bearbeiten]

class Taschenrechner : public QMainWindow, public Ui::MainWindow{
public Ui::MainWindow

wird nicht erläutert.

Würde für Anfänger aber zum Verständnis beitragen.


Mit dem Code

public Ui::MainWindow

wird das erstellte UI abgeleitet, da dieses im Namespace UI liegt steht das UI:: davor.

--Close1 08:25, 8. Sep. 2009 (CEST)[Beantworten]

Vielleicht sollte hier das Stichwort "Mehrfachvererbung" fallen. Denn das ist es ja, wenn ich es richtig verstanden habe. Jedenfalls ist "Was genau "public Ui::MainWindow" bedeutet, ist nicht klar" wie im Text geschrieben nicht das Gelbe vom Ei. --62.225.105.244 15:58, 19. Apr. 2011 (CEST)[Beantworten]

Titel dieses Buches[Bearbeiten]

Hallo!
Ich unterrichte selbst Anfänger in C++ und halte den Titel dieses Buches für irreführend. Ein C++-"Anfänger" wird zumeist mit dem Anfangscode überfordert sein.
Gründe:
1. Gleich zu Beginn in mehreren Dateien zu arbeiten ist ziemlich heftig.
2. Eine eigene Klasse zu erstellen, erfordert zu Beginn ein sehr hohes Abstaktionsvermögen.
3. Sofort eine Klassenhierarchie verarbeiten zu können, ist ein Hammer.

Der Titel "Qt für Interessierte mit C++-(Grund)Kenntnissen" wäre wesentlich angemessener.

Anregung: Vor das hier vorliegende Anfangsprojekt könnten Teile des Einstigstutorials von Trolltech in übersetzter Form einfließen. Wenn ich Zeit und Muße finden sollte, kann ich es mal versuchen. Kurzfristig ist aber nicht damit zu rechnen.

Mit freundlichen Grüßen und einem Dank für dieses Buch
teacher

Zumindest werden Grundkenntnisse in der Einleitung auch gefordert: "Dieses Tutorial setzt Grundkenntnisse in der C++-Programmierung voraus."--84.131.150.153 18:55, 5. Nov. 2009 (CET)[Beantworten]
Jemanden mit Grundkenntnissen würde ich nicht als Anfänger bezeichnen. (teacher)
Siehst du, ich schon...--23:41, 27. Apr. 2011 (CEST)

Fehlertoleranz[Bearbeiten]

Zunächst fand ich das Wiki-Book recht verständlich. Was mich aber total ausgebremst hat, waren sechs Fehler der Art

'InputA' was not declared in this scope.

Zuerst dachte ich auch daran, dass die Datei 'ui_Taschenrechner.h' nicht erzeugt wurde. Aber das wurde sie. Nur nicht im Quellverzeichnis, sondern im Ausgabe-Verzeichnis, wo auch das generierte Makefile landet. Nebenbei wäre der Compiler in einem solchen Fall wohl eher über die fehlende Datei aus der entsprechenden include-Anweisung gestolpert.

Naja - im Grunde fehlt im Book an der Stelle eine kurze Anleitung wie man den möglichen Fehlern begegnen kann - evtl. auch nur ein Link auf entsprechende Seiten.

Ich habe mich dann mal in den Quellcode meditiert und vor jede Referenz auf ein Element aus der GUI ein ui-> geschrieben. Also aus

  • InputA->setText("0");
  • ui->InputA->setText("0");

gemacht. Seit dem funktioniert es - ist aber definitiv nicht mehr der Quelltext aus dem Book.

Gruß jj

Wenn du etwas am Buch verbessern kannst: sei mutig und ändere es! --NeuerNutzer2009 23:41, 20. Sep. 2010 (CEST)[Beantworten]
Gerne, aber erst, wenn ich mich selbst nicht mehr als "Anfänger" einordne... Gruß jj, 09:35, 30. Sep. 2010 (CEST)
Also ich habe den gleichen Fehler, mit jjs Verbesserung ändert sich aber lediglich die Fehlermeldung in "..\Taschenrechner\Taschenrechner.cpp:9: error: 'class Ui::Taschenrechner' has no member named 'InputA'". --188.109.23.246 18:16, 16. Feb. 2011 (CET)[Beantworten]

fatal error: ui_Taschenrechner.h: Datei oder Verzeichnis nicht gefunden[Bearbeiten]

"ich habe aber das Problem, dass sich die ui_Taschenrechner.h nicht selbst erstellt hat, sodass mir das Tutorial insofern nichts gebracht hat" Dito, habe das selbe Problem, mit folgender Fehlermeldung:
x@y:~/Desktop/qtTest$ make

g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -o main.o main.cpp

In file included from main.cpp:3:

Taschenrechner.h:6: fatal error: ui_Taschenrechner.h: Datei oder Verzeichnis nicht gefunden

compilation terminated.

make: *** [main.o] Fehler 1

x@y:~/Desktop/qtTest$ ./Taschenrechner

bash: ./Taschenrechner: Datei oder Verzeichnis nicht gefunden


--134.147.163.247 09:59, 14. Feb. 2011 (CET)[Beantworten]

kannst du mal bitte ein "ls Taschenrechner.*" im Verzeichnis machen und das ergebnis hier hineinpasten? -- ThePacker 11:05, 14. Feb. 2011 (CET)[Beantworten]
Ergebnis: "Taschenrechner.cpp Taschenrechner.h" --134.147.163.247 11:37, 14. Feb. 2011 (CET)[Beantworten]
hast du vorher die beiden "qmake" Kommandos aufgerufen? -- ThePacker 11:45, 14. Feb. 2011 (CET)[Beantworten]
Ja. --134.147.163.247 14:00, 14. Feb. 2011 (CET)[Beantworten]
Ich probier es heute abend mal auf meinem Linuxsystem aus. Ich hab grad keines zur Hand, auf das ich das gerade nachstellen könnte. -- ThePacker 14:15, 14. Feb. 2011 (CET)[Beantworten]
Also unter Windows sah es bei mir nicht besser aus. --92.73.130.70 15:06, 16. Feb. 2011 (CET)[Beantworten]

Der Fehler besteht immer noch: "ui_Taschenrechner.h". Bitte entweder fixen oder die Anleitung entfernen. Nicht nur ich habe ewig versucht, das hin zu bekommen und meine Arbeit auf Fehler zu prüfen. Es ist mir einfach kein Weg bekannt, die Datei zu erstellen.