Einstellungen-Fenster

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
listeman
Beiträge: 74
Registriert: 19. Mai 2009 13:54
Kontaktdaten:

Einstellungen-Fenster

Beitrag von listeman »

Guten Tag,

ich hab ein Problem, das sich wahrscheinlich recht einfach lösen lässt - wenn man das richtige Stichwort weiß.

Unter qt 4.5 (linux) möchte ich aus einer Anwendung (QMainWindow) ein zweites Fenster öffnen. Das Fenster soll eine Art Einstellungenfenster sein. Eine längere Suche sowohl hier als über google brachte mich nicht zu einem gewünschten (und vor allem funktionierendem) Ergebnis. Ich vermute, dass mir einfach das richtige Stichwort zum Suchen fehlt...

Ich wäre echt dankbar, wenn mir jemand weiterhelfen könnte.

Viele Grüße
listeman
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Beitrag von MichaelS »

Moin,

Trolltech bzw. Nokia liefert mit QT eine Fülle von Beispielanwendungen und Tutorials. Da wirst Du mit Sicherheit fündig werden.

Gruß Michael
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Widget mit Formlayout erstellen?
listeman
Beiträge: 74
Registriert: 19. Mai 2009 13:54
Kontaktdaten:

Beitrag von listeman »

Danke für eure Antworten!

Bin in den Beispielen von Trolltech auf ein Beispiel gestoßen, in dem ein recht ähnliches Problem mit QDialog gelöst wurde.

Allerdings hab ich es nicht geschafft, das an meine Bedürfnisse anzupassen.

Ich poste mal die wichtigen Teile meiner Dateien:

einstellungen.h

Code: Alles auswählen

#ifndef EINSTELLUNGEN_H
#define EINSTELLUNGEN_H

#include <QtGui/QDialog>
#include <QWidget>
#include <QVBoxLayout>
#include <QLabel>


class Einstellungen : public QDialog {

	Q_OBJECT

public:
	Einstellungen(QWidget*);

};

#endif // EINSTELLUNGEN_H

einstellungen.cpp

Code: Alles auswählen

#include "einstellungen.h"

Einstellungen::Einstellungen(QWidget *parent) : QDialog(parent) {

	QVBoxLayout *main = new QVBoxLayout;
	QLabel *hallo = new QLabel("Hallo");
	main->addWidget(hallo);
	setLayout(main);

}

mainwindow.cpp

Code: Alles auswählen

...
#include "einstellungen.h"
...
connect(ui->action_Einstellungen, SIGNAL(triggered()), this, SLOT(einstellen()));
...
void MainWindow::einstellen() {
	Einstellungen(this).show();
}

Er bringt dabei keine Kompilierfehler, aber wenn ich im Menu auf Einstellungen klicke passiert nichts sichtbares. Wenn ich jedoch in der "einstellungen.cpp" eine QMessageBox hinzufüge, dann öffnet die sich bei Klick auf Einstellungen. Das Programm kommt also dorthin, nur funktioniert das mit dem Anzeigen irgendwie nicht...[/code]
listeman
Beiträge: 74
Registriert: 19. Mai 2009 13:54
Kontaktdaten:

Beitrag von listeman »

Okay, ich hab es jetzt ein wenig geändert.

In der einstellungen.cpp binde ich jetzt eine weitere ui-Datei mit dem Layout ein. Meine einstellungen.cpp sieht jetzt so aus:

einstellungen.cpp:

Code: Alles auswählen

#include "einstellungen.h"
#include "ui_einstellungen.h"

Einstellungen::Einstellungen(QWidget *parent) : QDialog(parent), ui(new Ui::Einstellungen) {

	ui->setupUi(this);

	this->setVisible(true);

//	QMessageBox::information(this,"Abgelaufen","Dieser Code ist abgelaufen!");

}


Einstellungen::~Einstellungen() {

	delete(ui);

}

Jetzt sehe ich das Fenster für den Bruchteil einer Sekunde aufblitzen. Wenn ich die Zeile mit der QMessageBox entkommentiere, dann bleibt das Fenster hinter der MessageBox erhalten. Sobald ich aber OK drücke verschwindet sowohl das Nachrichtenfenster als auch das Einstellungenfenster, aber warum?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Stichwort: Lebensdauer von Variablen.
listeman
Beiträge: 74
Registriert: 19. Mai 2009 13:54
Kontaktdaten:

Beitrag von listeman »

Sorry, das ich jetzt erst antworten kann...

Daran liegt es! Das Fenster ist nur solange aktiv, wie er in der mainwindow.cpp in dieser Zeile ist.

Wie kann ich das aber dauerhaft erstellen? Sorry, hab damit bisher noch keinerlei Erfahrung gemacht...
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich würde sagen - kauf Dir ein C++ für Anfänger Buch und wenn Du dann bei Member-Variablen bist reden wir weiter...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
listeman
Beiträge: 74
Registriert: 19. Mai 2009 13:54
Kontaktdaten:

Beitrag von listeman »

Manchmal seh ich wirklich den Wald vor lauter Bäumen nicht...

Ist doch eigentlich ganz einfach und logisch, dass eine Instanz, die in einer Funktion initialisiert wird nur temporär innerhalb der Funktion vorhanden ist... die ganze Sache ließ sich ganz einfach lösen:

mainwindow.h

Code: Alles auswählen

...
Einstellungen fenster;
...
mainwindow.cpp:

Code: Alles auswählen

...
void MainWindow::einstellen() {
fenster.zeige();
}
...
einstellungen.cpp:

Code: Alles auswählen

void Einstellungen::zeige() {
	this->setVisible(true);
}
Und nun funktioniert es...


Danke an alle, die mir hier geholfen haben!!!
Antworten