Frage zu QFileDialog und getSaveFilename

Alles rund um die Programmierung mit Qt
Antworten
pospiech
Beiträge: 232
Registriert: 1. September 2006 17:20
Wohnort: Hannover

Frage zu QFileDialog und getSaveFilename

Beitrag von pospiech »

Ich habe folgendes ausprobiert

Code: Alles auswählen

	QStringList filters;
	filters << "Image files (*.png *.xpm *.jpg)"
         << "Text files (*.txt)"
         << "Any files (*)";

	QString fileName;

	QFileDialog dialog(this);
	dialog.setAcceptMode(QFileDialog::AcceptSave);
	dialog.setFileMode(QFileDialog::AnyFile);
	dialog.setViewMode(QFileDialog::Detail);
	dialog.setFilters(filters);
	
	
	if (dialog.exec() == QDialog::Accepted)
	{
		fileName = dialog.getSaveFileName();
	}
Um dann festzustellen, dass getSaveFileName immer einen eigenen Dialog aufbaut. In diesem Code werden also zwei Dialoge dargestellt. Wobei der erste nicht der vom System ist (wieso eigentlich?).

Das man mit getSaveFileName(...) viele der Optionen in einer Zeile erschlagen kann habe ich anhand der Doku nachvollziehen können.

Aber wie wende ich die von mir gesetzen Optionen grundsätzlich an wenn ich getSaveFileName benutze.
Und ist es möglich so wie ich es gemacht habe den Dialog aufzurufen und das Ergebnis abzufragen, ohne das ein neuer Dialog gezeigt wird.

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

Re: Frage zu QFileDialog und getSaveFilename

Beitrag von franzf »

Mach die Augen beim Lesen der Doku weit auf, dann siehst du dass getSaveFileName static ist ;). Das rufst du dan nicht mit einem Objekt auf, sondern immer so:

Code: Alles auswählen

QString file = QFileDialog::getSaveFileName( ... );
Wenn du dir deinen Dialog delber mit Flags konfigurierst dann nimm doch auch die normale public-Methode

Code: Alles auswählen

QStringList QFileDialog::selectedFiles () const
Grüße
Franz
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Wobei der erste nicht der vom System ist (wieso eigentlich?).
Weil es so in der Doku steht...

Du suchst: QStringList QFileDialog::selectedFiles () const
pospiech
Beiträge: 232
Registriert: 1. September 2006 17:20
Wohnort: Hannover

Beitrag von pospiech »

upsala hat geschrieben:
Wobei der erste nicht der vom System ist (wieso eigentlich?).
Weil es so in der Doku steht...

Du suchst: QStringList QFileDialog::selectedFiles () const
Funktioniert mit

Code: Alles auswählen

	QStringList filters;
	filters	       << "Text files (*.txt)"
			<< "Any files (*.*)";

	QFileDialog dialog(this);
	dialog.setAcceptMode(QFileDialog::AcceptSave);
	dialog.setFileMode(QFileDialog::AnyFile);
	dialog.setViewMode(QFileDialog::Detail);
	dialog.setFilters(filters);
	
	if (dialog.exec() == QDialog::Accepted)
	{
		QStringList fileName = dialog.selectedFiles();
		if (!fileName.isEmpty())
			lineEdit_SaveNameParameters->setText(fileName[0]);
	}
Aber ich möchte schon das der native Dailaog genommen wird, nicht der von Qt. Ist das mit dieser Methode überhaupt möglich?

Nutze ich alternativ den Dialog der statischen Funktion muss ich mir die Filterliste umständlicher zusammenbasteln

Code: Alles auswählen

	QString filters;
	filters   = "Text files (*.txt);;" ;
	filters += "Any files (*.*)";
Ist das auch ähnlich möglich wie im obigen Beispiel mit der QStringList ?

Das komplette Beispiel mit getSaveFileName sieht jetzt bei mir so aus:

Code: Alles auswählen

	QFileDialog::Options options;

	QString filters;
	filters   = "Text files (*.txt);;" ;
	filters += "Any files (*.*)";

	QString selectedFilter;	

    QString fileName = QFileDialog::getSaveFileName(
		this,						// parent widget
        tr("Select file to save"),	//Cpation
        lineEdit_SaveNameParameters->text(), // Dir
        filters,					// Filter
        &selectedFilter,			// returns selected filter
        options);					// possible options
    
	 if (!fileName.isEmpty())
	         lineEdit_SaveNameParameters->setText(fileName);
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Es gibt bei QStringList die Methode join, die dürfte genau das machen, was du suchst...
Antworten