QT Ausgabe (Datentypen)
-
Ich wollte erstmal ein Feld ausgeben und wenn das funktioniert eine Schleife bauen Der Cast ist drin weil ich eine ganze Weile schon rumprobiert habe Und irgendwie wird das Feld wie gesagt eben nicht ausgegeben wegen einem falschen Typ oder wenn ich wie hier QChar verwende wird ein zufälliger Buchstabe ausgegeben, was ich nicht ganz verstehe.
Hier mal der Code in dem ich das Array befülle. Eigentlich eine simple Schleife die alle Felder mit 'a' füllen soll.
#include "functionClass.h" char functionClass::feldBefuellen(char feld[5][5]) { for (int i = 0; i < 5; i++) { for (int z = 0; z < 5; z++) { feld[i][z] = 'a'; } } return feld[5][5]; }
-
Mein Array das ausgegeben wird erhält seinen Inhalt ja aus einem anderen Array. Da ich mir nicht sicher war ob ich diese Datenübertragung richtig gemacht habe, habe ich mal eine Schleife gebaut die jedes Feld einzeln überträgt.
public slots: void on_btnHello_clicked() { mainClass mc; QChar feld_clicked[5][5]; for (int i = 0; i < 5; i++) { for (int z = 0; z < 5; z++) { feld_clicked[i][z] = mc.feld_mainClass[i][z]; } } //feld_clicked[5][5] = mc.feld_mainClass[5][5]; ui.btnHello->setText("Hi!"); QString text = ui.lineInput->text(); ui.textBrowser->insertPlainText(feld_clicked[5][5]); //ui.textBrowser->insertPlainText("Hayho"); }
Nun erhalte ich zwar eine Ausgabe aber nur ein Symbol anstatt 'a'.
Stimmt da vielleicht der Zeichensatz nicht? Aber eigentlich will ich ja nur ein normales a ausgeben.http://www.pic-upload.de/view-27408877/QT_Screenshot.png.html
Hier ein Screenshot von der Ausgabe momentan
-
Deine ständigen [5][5] Zugriffe sind falsch, deine Arrays haben doch nur 5 Elemente, also ist der letzte Index 4. Deine Schleifen machst du aber immer richtig. Deswegen steht an der Adresse 5 auch was zufälliges drin.
-
Stimmt da hast du natürlich recht.
Aber hab mittlerweile zwei Schleifen. Die sollten stimmen und jedes Feld ausgeben. Aber bekomme nun auch für jedes Feld Hieroglyphen anstatt meines 'a' char
public slots: void on_btnHello_clicked() { mainClass mc; QChar var; QChar feld_clicked[5][5]; for (int i = 0; i < 5; i++) { for (int z = 0; z < 5; z++) { feld_clicked[i][z] = (QChar)mc.feld_mainClass[i][z]; } } //feld_clicked[5][5] = mc.feld_mainClass[5][5]; ui.btnHello->setText("Hi!"); QString text = ui.lineInput->text(); for (int i = 0; i < 5; i++) { ui.textBrowser->insertPlainText("\n"); for (int z = 0; z < 5; z++) { feld_clicked[i][z] = mc.feld_mainClass[i][z]; ui.textBrowser->insertPlainText(feld_clicked[i][z]); } }
-
Überleg mal genau, ob und welchen Sinn "mainClass mc;" macht!
-
Hey Th69
"MainClass mc;" brauch ich ja um mein Array aus meiner anderen Klasse zu bekommen, denn das wollte ich nicht hier lokal füllen wo ich das GUI baue/ändere. Und um darauf zugreifen zu können benötigt ich, soweit ich dass in C++ weiß, ein Objekt der entsprechenden Klasse.
Ob eine MainClass bei meinem Projekt effektiv Sinn macht ist wieder was anderes, aber ich wollte mein Projekt in übersichtliche Klassen aufteilen.Für Tipps die vielleicht allgemein meinen Code verbessern wäre ich natürlich auch dankbar Wie gesagt fange erst mir C++ an und versuche Stück für Stück mehr Struktur und Ordnung in den Code zu bringen.
Aber das Hauptproblem ist leider immernoch die Ausgabe Oder hat jemand eine komplett andere Idee vielleicht sogar, wie ich ein einfaches Char Array auf meiner GUI ausgeben kann?
EDIT: Das Problem der zufälligen Ausgabe erfolgt auch wenn ich ein feld wie [1][1] was ja im Bereich liegen sollte in eine QChar Variable lese und dann ausgebe. Vielleicht stimmt da was mit der Übernahme von Array Inhalten in den Typ QChar oder ähnlich nicht.
-
Also wenn ich lokal ein Array erstelle und es ebenfalls lokal fülle, dann gibt er es korrekt aus. Vielleicht liegt das Problem da, dass ich in einigen Methoden nicht "QChar" sondern nur "char" verwenden kann oder ein include fehlt.
Aufjedenfall scheint es an der Übergabe zu liege und dass dort ein Fehler unterläuft.
-
Danke für die Beteiligung an diesem Thread
Es funktioniert jetzt. Die Lösung war eigentlich relativ simple wenn man den Fehler erst eingegrenzt hat. Obwohl die Lösung jetzt nicht ganz so strukturiert ist wie ich es wollte. Ich schreib hier eine kleine Lösunghilfe, falls jemand mal das selbe Problem hat Hoffe es hilft.Das Problem lag anscheinend an der Übergabe meines Arrays. Daher muss man das Array lokal anlegen.
Nun habe ich im Header lediglich einen Prototype der Funktion (ohne body) erstellt und diese in der zum Header gehörigen .cpp Datei ausgebaut. Dabei erstelle ich in der .cpp Datei ein Array und lasse dieses über die Methode füllen. Da das Array nun gleich als "QChar" deklariert und nicht durch verschiedene "char" Methoden geschleust wird, wird auch alles richtig ausgegeben.
Header-Code:
#include "mainClass.h" #include "functionClass.h" class QT_Project : public QMainWindow { Q_OBJECT public: QT_Project(QWidget *parent = 0); ~QT_Project(); private: Ui::QT_ProjectClass ui; // begin new code public slots: void on_btnHello_clicked(); //ui.textBrowser->insertPlainText("Hayho"); // end new code }; #endif // QT_PROJECT_H
Cpp-Code:
#pragma once #include "qt_project.h" QT_Project::QT_Project(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); } QT_Project::~QT_Project() { } void QT_Project::on_btnHello_clicked() { QChar charArray[5][5]; for (int i = 0; i < 5; i++) { for (int z = 0; z < 5; z++) { charArray[i][z] = 'a'; } } for (int i = 0; i < 5; i++) { ui.textBrowser->insertPlainText("\n"); for (int z = 0; z < 5; z++) { ui.textBrowser->insertPlainText(charArray[i][z]); } } Ui::QT_ProjectClass ui; }
Wie ich damit nun weiterarbeite muss ich mal schauen, aber die Ausgabe funktioniert schonmal
Vielen Dank nochmal!
-
Wieso postest du eine Frage zu Qt im C++/CLI Forum?
-
DDyrdek1992 schrieb:
Die Lösung war eigentlich relativ simple wenn man den Fehler erst eingegrenzt hat.
Dir fehlen noch ganz massiv C++ Grundlagen. Dein "mainClass mc;" erzeugt eine neue Instanz von mainClass. Damit bekommst du nicht das Array, das du irgendwo anders initialisiert hattest. Wahrscheinlich ist das auch uninitialisiert, deswegen zufällige Zeichen. Wo du was initialisierst und weitergibst, musst du dir schon genauer überlegen. Das ist übrigens nicht unbedingt nur ein Anfängerfehler (in der Form natürlich schon), auch später ist es oft die entscheidende Frage, wie man sein Programm aufteilt und wo was verwaltet und weitergegeben wird.