QString Problem

Alles rund um die Programmierung mit Qt
Antworten
Rainer
Beiträge: 17
Registriert: 5. Oktober 2007 12:12

QString Problem

Beitrag von Rainer »

Hallo,
ich hab folgendes Problem:
In meiner mainwindow.h Datei deklariere ich folgendes:

Code: Alles auswählen

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

public:
	MainWindow( QWidget * parent = 0, Qt::WFlags f = 0 );	
	void setInsert(QString title);		
	
private slots:
	//irgendwas

signals:
       //irgendwas
protected:
       //irgendwas
private:
       QString test_Title;

};
#endif
In meiner mainwindow.cpp Datei steht folgendes:

Code: Alles auswählen

void MainWindow::setInsert(QString title)
{
     test_Title = title;
}
In meiner Datei xml.h Datei:

Code: Alles auswählen

class MainWindow;

class XmlDialog : public QDialog, public Ui::xmlDialog
{
	Q_OBJECT
	
public:
	XmlDialog( QWidget * parent);

protected:
	//irgendwas

private slots:
	void insert();
	
private:

	MainWindow *mainWindow;
	QString cTitle;
	QString cDescription;
	QString cAuthor;
	
};

#endif // __XML_H__

In der Datei xml.cpp steht folgendes:

Code: Alles auswählen

void XmlDialog::insert()
{
	cout << "Title: " << qPrintable(cTitle) << endl;
	cout << "Description: " << qPrintable(cDescription) << endl;
	cout << "Author: " << qPrintable(cAuthor) << endl;
	mainWindow->setInsert(cTitle);
}
Wenn ich jetzt diese Funktion in meinem Programm aufrufe hängt es sich immer auf oder schließt sich gleich. Was mach ich falsch??!?
Bitte um Hilfe
Danke
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Es ist kein Fehler erkennbar. Benutzte bitte einen Debugger...
rico123456789
Beiträge: 6
Registriert: 22. Oktober 2007 11:04

Beitrag von rico123456789 »

Hi,

ich habe vielleicht eine Antwort für dein Problem. Es könnte sein, dass du noch keinen Speicher für dein Mainwindow angefordert hast. Somit kommt es dann zu einem unerlaubten Zugriff. Falls nicht vorhanden, füge einfach die nachfolgende Zeile dem Kontruktor von XmlDialog hinzu:

mainWindow = new MainWindow(this);

Bei solchen Problemen bietet es sich meistens an einen Debugger, wie beispielsweise gdb zu benutzen.

rico
Rainer
Beiträge: 17
Registriert: 5. Oktober 2007 12:12

Beitrag von Rainer »

danke für deine schnelle antwort, hat mein problem gelöst
und warum brauch ich diese Codezeile jetzt genau?
rico123456789
Beiträge: 6
Registriert: 22. Oktober 2007 11:04

Beitrag von rico123456789 »

Such dir am besten mal ein Tutorial über C++. Die meisten haben dann ein Kapitel über Zeiger und ich denke da findest du ganz schnell die Anwort warum du diese Zeile unbedingt brauchst. Besser könnte ich dir das wahrscheinlich hier auch nicht erklären.
Rainer
Beiträge: 17
Registriert: 5. Oktober 2007 12:12

Beitrag von Rainer »

Hab leider doch noch ein weiteres Problem.
Hab die Änderungen gemacht so wie du es mir gesagt hast, hab aber jetzt wo ich meine Variable test_Title weiterverwenden will ein Problem.
Bei der Übergabe besitzt die Variable noch den erwünschten Wert, wenn ich aber die Variable nachher wo anders aufrufe ist sie leer warum?

lg rainer
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ohne Code wird dir in diesem Falle keine weiterhelfen könne. Vor allem scheint es hier an C++-Grundlagen zu fehlen. Leg dir mal welche zu.
Rainer
Beiträge: 17
Registriert: 5. Oktober 2007 12:12

Beitrag von Rainer »

hab mein problem leider noch immer nicht lösen können
also in meiner mainwindow.h hab ich folgendes deklariert:

Code: Alles auswählen

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

public:
   MainWindow( QWidget * parent = 0, Qt::WFlags f = 0 );   
   void setInsert(QString title);      
   
private slots:
   //irgendwas

signals:
       //irgendwas
protected:
       //irgendwas
private:
       QString cXmlTitle;

};
#endif
in mainwindow.cpp steht folgendes:

Code: Alles auswählen

MainWindow::MainWindow( QWidget * parent, Qt::WFlags f) : QMainWindow(parent, f)	//Standardconstructor
{
	setupUi(this);		//MainWindow set aktiv
	setupActions();		//connect signals and slots
	activateManual();	//activate manusl control for default
	
	//Initialize all variables
	nCountkoor=0;
	nCountsave=0;
	nCountin=0;
	cXmlTitle="Route 1";
	cXmlDescription="Testfile";
	cXmlAuthor="Rainer";
	mFilePath = "out.xml";
}

void MainWindow::setInsert(QString title)
{
     cXmlTitle = title;
} 
in der datei xml.h ist folgendesn:

Code: Alles auswählen

#ifndef __XML_H__
#define __XML_H__

#include "ui_xml.h"

class MainWindow;

class XmlDialog : public QDialog, public Ui::xmlDialog
{
   Q_OBJECT
   
public:
   XmlDialog( QWidget * parent);

protected:
   //irgendwas

private slots:
   void insert();
   
private:

   MainWindow *mainWindow;
   QString cTitle;
   QString cDescription;
   QString cAuthor;
   
};

#endif // __XML_H__ 
und in der datei xml.cpp steht folgender Code

Code: Alles auswählen

#include "xml.h"
#include <QtGui>
#include "mainwindow.h"

XmlDialog::XmlDialog(QWidget *parent): QDialog(parent)
{
	setupUi(this);
	mainWindow = new MainWindow(this);
	setupActions();
}

void MainWindow::xmlWindow()
{
	XmlDialog preview(this);
	preview.exec();
}

void XmlDialog::setupActions()
{
	//irgendwas..	
	connect(commitButton, SIGNAL(clicked()), this, SLOT(insert()));
}
	
void XmlDialog::insert()
{
	cout << "Title: " << qPrintable(cTitle) << endl;
	mainWindow->setInsert(cTitle);
}
in der datei mainwindow.cpp möchte ich dann wiederrum diese werte in einem xml file speichern:

Code: Alles auswählen

void MainWindow::saveFile(const QString &name)
{
	QFile o_file(name);										
	if (o_file.open(QIODevice::WriteOnly)==0)	//open device for writing
	{
		statusBar()->showMessage(tr("File not saved."), 3000);
	}
	else
	{
		statusBar()->showMessage(tr("File saved."), 3000);
	}
	
			
	QDate datetest(QDate::currentDate());	//Datum zuständig
	QString datumvalue=datetest.toString ("dd.MM.yyyy");//DATUM
	
	QDomElement route = s_xmldoc.createElement("Route");	
	QDomElement routeinfo = s_xmldoc.createElement("RouteInfo"); 
	QDomElement title = s_xmldoc.createElement("Title");		
	QDomText name1 = s_xmldoc.createTextNode(cXmlTitle);
	QDomElement item = s_xmldoc.createElement("Beschreibung"); 
	QDomText filename = s_xmldoc.createTextNode(cXmlDescription);
	QDomElement date = s_xmldoc.createElement("Datum");
	QDomText huu = s_xmldoc.createTextNode(datumvalue);
	QDomElement autor = s_xmldoc.createElement("Autor");
	QDomText autorname = s_xmldoc.createTextNode(cXmlAuthor);
	QDomElement routedaten = s_xmldoc.createElement("RouteDaten");	
	
	s_xmldoc.appendChild(route);		
	route.appendChild(routeinfo);
	routeinfo.appendChild(title);	
	title.appendChild(name1);
	routeinfo.appendChild(item);
	item.appendChild(filename);
	routeinfo.appendChild(date);
	date.appendChild(huu);
	routeinfo.appendChild(autor);
	autor.appendChild(autorname);
	route.appendChild(routedaten);
	routedaten.appendChild(koordinaten);
	
	
	QTextStream out(&o_file); 
	const int Indent=4;		
	s_xmldoc.save(out, Indent);	
	o_file.close();			
}
wenn ich jetzt mein xml file speichere stehen nicht meine eingegebenen werte von xml.cpp drinnen sondern die default werte ("Route 1", "Testfile",...)
was mach ich falsch??
danke
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Code: Alles auswählen

void MainWindow::xmlWindow()
{
   XmlDialog preview(this);
   preview.exec();
}

Du erzeugst hier eine neue Instanz von XmlDialog und dort wieder ein neues MainWindow.
Warum ein Dialog überhaupt ein MainWindow erzeugen kann/soll/darf ist mir schleierhaft...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Rainer
Beiträge: 17
Registriert: 5. Oktober 2007 12:12

Beitrag von Rainer »

ich hab mir gedacht, dass ich so über mein hauptfenster ein neues fenster öffnen kann
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Du erzeugst ein *neues* Hauptfenster.
Ich glaube Du solltest, anstatt drauf loszuprogrammieren, erstmal ein paar Beispiele und das Qt-Tutorial durcharbeiten.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten