Laufzeit Probleme mit QFileDialog

Verschiedenes zu Qt
Antworten
Kohly
Beiträge: 18
Registriert: 9. April 2010 12:05

Laufzeit Probleme mit QFileDialog

Beitrag von Kohly »

Ich wollte über einen QFileDialog ein Orderverzeichnis in eine QLineEdit speichern.
Habe in meiner QFileDialog Klasse das SIGNAL fileSelected(QString) connected. Speichert das Verzeichnis als QString auch.

In meinem MainWindows läuft folgendes ab, wenn ich ein Button drücke.

Code: Alles auswählen

{
QFileDialog.show();
ui.QEditLine->setText(QFileDialog.getString());
}
Warum er die QEditLine dann mit dem alten String füttern ist mir klar, nur wie löse ich dieses Problem elegant ? wäre QTimer eine elgante Lösung ?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

QTimer wäre hier alles andere als elegant!
Schau dir mal die statischen Funktionen von QFileDialog an.
Überhaupt ist der Code absolut unkompilierbar!
1) QFileDialog hat keine FUnktion getString()
2) QFileDialog ist eine Klasse, und show() keine statische Funktion.
3) Terminiert show() sofort.

Und was heißt eigentlich "meine QFileDialog Klasse"?

Du willst wahrscheinlich einfach nur das hier
http://doc.trolltech.com/4.6/qfiledialo ... enFileName
Kohly
Beiträge: 18
Registriert: 9. April 2010 12:05

Beitrag von Kohly »

meine Klasse heisst, dass ich mir eine geschrieben habe und diese von QFileDialog abgeleitet habe.

show() sowie getString() sind halt Methoden dieser Klasse.

show() zeigt den Dialog an.
getString() gibt einfach einen QString zurück vom ausgewählten Pfad/Ordner.

Mein Problem ist ja das ein kleiner Zeitraum zwischen dem speichern
des QStrings liegt, wenn ich mir einen Pfad/Ordner im QFileDialog aussuche.

Um weiter in Detail zu gehen, ich möchte einfach den User ermöglichen
einen Ordner auszuwählen, wo dann ein Download gespeichert wird.
Und dieser Pfad wird dann in einem QLineEdit gespeichert.

Es Funktoniert auch !

Der QString wird aber erst dann ins QLineEdit geschrieben wenn ich das zweite mal auf den kopf drücke was logisch ist.

Ich müsste halt irgendwie das connect SIGNAL fileselected in meinem MainWindow abfangen. Haste da vielleicht eine Idee ?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Kohly hat geschrieben:Um weiter in Detail zu gehen, ich möchte einfach den User ermöglichen
einen Ordner auszuwählen, wo dann ein Download gespeichert wird.
Und dieser Pfad wird dann in einem QLineEdit gespeichert.
Aber dafür musst du doch nicht extra ableiten...

Code: Alles auswählen

QString directory = QFileDialog::getExistingDirectory();
Und das wars!
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Kohly hat geschrieben:Der QString wird aber erst dann ins QLineEdit geschrieben wenn ich das zweite mal auf den kopf drücke was logisch ist.
Nein ist es nicht.
Ich müsste halt irgendwie das connect SIGNAL fileselected in meinem MainWindow abfangen. Haste da vielleicht eine Idee ?
Wieso eigentlich über connect? Das ist ein einziger Funktionsaufruf, in dem SLOT kannst du doch gleich den neuen Text ins LineEdit legen.

Zeig mal mehr Code, dass man sich was drunter vorstellen kann.
Kohly
Beiträge: 18
Registriert: 9. April 2010 12:05

Beitrag von Kohly »

Wieso eigentlich über connect? Das ist ein einziger Funktionsaufruf, in dem SLOT kannst du doch gleich den neuen Text ins LineEdit legen.
genau nur raff ich nicht wie ich das machen soll.

-------------------------------------------------

LineEdit befindet sich ja auf der ui

ich spreche ihn mit ui.LineEdit ->xzy an

--------------------------------------------------

meine QFileDialog Klasse spreche ich mit

QFileDialog.xyz an

--------------------------------------------------

Das Signal wird ja in der Klasse QFileDialog ausgelöst
wie soll ich das in meine Hauptklasse holen.


--------------------------------------------------

Code: Alles auswählen

class Hauptklasse: public QMainWindow
{
	Q_OBJECT

public:
	Hauptklasse(QWidget *parent = 0, Qt::WFlags flags = 0);
	~Hauptklasse();

private:
	Ui::HauptklasseClass ui;
	DirectoryChange OutputFolder;  // <-QFileDialog
};
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Kohly hat geschrieben:meine QFileDialog Klasse spreche ich mit

QFileDialog.xyz an
Nein, das geht nicht...
Hab ich auch schon oben geschrieben.
Du kannst dein "OutputFolder"-Objekt mit

Code: Alles auswählen

OutputFolder.getString()
ansprechen, aber den Ausdruck

Code: Alles auswählen

QFileDialog.getString()
nimmt dir dein Compiler 100% nicht ab!

Und weiterhin bleibst du eine Antwort schuldig, warum du unbedingt ableiten musst! Das ist 100%ig nicht notwendig! Den passenden Aufruf, wie du an ein Directory kommst hab ich dir auch gezeigt.
Versuch es doch wenigstens das mal unter zu bekommen.
Und lass deine komplette Filedialog-Ableitung weg.
Kohly
Beiträge: 18
Registriert: 9. April 2010 12:05

Beitrag von Kohly »

Code: Alles auswählen

QFileDialog.xyz
war ja nur Symbolisch gemeint. Ich versuche darauf in Zukunft zu verzichten.

Ich werde mir nochmal gedanken über mein Problem machen und es
evtl nochmal etwas übersichtlicher schildern wenn ich nicht weiter komme.

Es ist auf jedenfall ein OOP Verständisproblem, was ich habe.

danke dir soweit.
Kohly
Beiträge: 18
Registriert: 9. April 2010 12:05

Beitrag von Kohly »

Problem gelöst !

Meine QFileDialog erbt falsch ^^ habe das public vor dem QFileDialog
vergessen dadruch erbt sie diese nur private.

MeineKlasse : public QFileDialog

deswegen konnte ich nicht connecten ^^


Du hattest recht mit
http://doc.trolltech.com/4.6/qfiledialo ... enFileName
ist es viel einfacher zu realisieren.

Meine QFileDialog wurde gelöscht und durch eine Zeile Code ersetzt.

Danke
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Kohly hat geschrieben:Du hattest recht mit
http://doc.trolltech.com/4.6/qfiledialo ... enFileName
ist es viel einfacher zu realisieren.
Aber für einen Download ist in meinen Augen getOpenFileName nicht das richtige.
Entweder soll der User angeben können, unter welchen Namen die Datei abgespeichert werden soll, dann nimmt man getSaveFileName(). Soll nur ein Verzeichnis gewählt werden, nimmst du getExistingDirectory().

Das Problem an getOpenFileName ist, dass du keine neuen Verzeichnisse anlegen kannst, und das ist ja vllt. recht nützlich, wenn du was speichern willst.
Kohly
Beiträge: 18
Registriert: 9. April 2010 12:05

Beitrag von Kohly »

ja hast recht

Code: Alles auswählen

QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"),"/home",QFileDialog::ShowDirsOnly| QFileDialog::DontResolveSymlinks);
Diese Zeile Code hab ich jetzt drin.
Antworten