Seite 1 von 1
FileDialog::getSaveFileName
Verfasst: 16. Februar 2006 11:07
von grummel
Hallo Leute,
ich habe ein Problem, an dem ich mir die Zähne ausbeisse. Leider konnte ich keine wirkliche Hilfe im Netz finden und probiere es nun auf diese Weise.
Folgendes:
ich habe in einem Dialog einen Butto "open", mit dem ich einen FileDialog öffne. In diesem Filedialog möchte ich einen Namen angeben, unter dem ein .rdb - File gespeichert werden soll. Das klappt auch, nur speichert er mir diese .rdb - File immer in das Verzeichnis, in dem der .exe - File des Programms liegt. Ich hätte gerne, dass der .rdb - File da abgespeichert wird, wo ich im FileDialog hinblättere.
Kann mir bitte jemand helfen?
Gruß, Grummel
Re: FileDialog::getSaveFileName
Verfasst: 16. Februar 2006 13:25
von macman
grummel hat geschrieben:Kann mir bitte jemand helfen?
Ohne Code? Wie soll man da sehen was Du verkehrt machst. Auf jeden Fall muß die Stelle dabei sein, an der Du das File zum schreiben öffnest. Da vermute ich nämlich ehr den Fehler.
Verfasst: 16. Februar 2006 14:56
von grummel
Ich dachte nur, dass jeder weis, wie ein FileDialog aussieht.
Aber hier ist mein Code:
// meine Methode, die aufgerufen wird, wenn ich den "Open" Button im Hauptdialog betätige
void createrdbdialogImpl::openrdb_new()
{
QString tmp = QFileDialog::getSaveFileName(
"C:/Projekte",
"RDB (*.dad)",
this,
"save file dialog"
"Choose a filename to save under" );
ausgabe = tmp.section( '/', -1 );
// wird an ein Textfeld im Hauptdialog zurückgegeben
namerdb_tf->setText(ausgabe);
}
Verfasst: 16. Februar 2006 15:12
von macman
grummel hat geschrieben:Ich dachte nur, dass jeder weis, wie ein FileDialog aussieht.
Natürlich weiß ich wie der Filedialog aussieht, aber da ist ja auch nicht der Fehler. Und was hab ich geschrieben? Ich möchte den Teil, an dem die zu schreibenden Datei geöffnet wird.
grummel hat geschrieben:
ausgabe = tmp.section( '/', -1 ); // wird an ein Textfeld im Hauptdialog zurückgegeben
Hallo!! Guck mal!! Du schneidest den Pfad ab und übergibst nur den Filename. Und da wunderst Du dich das an der falschen Stelle gesichert wird? Du weißt wie man einen Debugger bedient?

Verfasst: 17. Februar 2006 13:25
von grummel
Sag mal, pöbelst du immer leute an, die nicht wissen wie was geht?
Sorry, dass ich das noch nicht lang mache.
Sicher weiss ich wie der debugger funktioniert.
Das abschneiden hat in dem moment nix mit speichern zu tun. denn das abschneiden der endung dient nur dazu, weil nur der name der datei an das textfeld im hauptdialog übergeben werden soll...
deswegen nehme ich dazu einen neuen String "ausgabe" ...
Verfasst: 17. Februar 2006 13:30
von grummel
und hier noch bisschen code:
// m_rdbname ist der, den ich beim filedialog eingebe
rdb = initrdb(m_rdbname, RDB_WRITE, 0777, &hdr);
if (rdb < 0) /* Fall 1 : neue rdb */
{
if(rasterx_tf->text().toInt() == false ||
rastery_tf->text().toInt() == false)
{
QMessageBox::information( this, "Fehler", "Rasterschrittweite muss Int sein!");
rasterx_tf->setText("100");
rastery_tf->setText("100");
exec();
}
else
{
hdr.xrast = rasterx_tf->text().toInt();
hdr.yrast = rastery_tf->text().toInt();
}
hdr.xbdnum = 0; /* Anzahl der x-Bloecke (Vorbelegung) */
hdr.ybdnum = 0; /* Anzahl der y-Bloecke (Vorbelegung) */
hdr.xshift = 0;
while (m_ihelp_x > 1)
{
m_ihelp_x >>= 1;
hdr.xshift++;
}
hdr.yshift = 0;
while (m_ihelp_y > 1)
{
m_ihelp_y >>= 1;
hdr.yshift++;
}
if(hdr.xshift < 1) hdr.xshift = 1;
if(hdr.yshift < 1) hdr.yshift = 1;
if(hdr.xshift > 8) hdr.xshift = 8;
if(hdr.yshift > 8) hdr.yshift = 8;
strcpy(st,rdbinfo_tf->text());
strncpy(hdr.infordb, st, sizeof(hdr.infordb));
/* rdb erzeugen */
rdb = initrdb(m_rdbname, RDB_CREAT, 0777, &hdr);
if (rdb < 0)
{
QMessageBox::information( this, "RDB", "RDB kann nicht geoeffnet werden.");
}
}
else /* Fall 2 : rdb bereits vorhanden */
{
QMessageBox::information( this, "RDB", "RDB vorhanden.");
namerdb_tf->clear();
}