Unsolved QFileDialog ed estensione scelta
-
ciao!
sto cercando di usare un QFileDialog per salvare un file.
solo che con questo codice ottengo il nome del file senza estensione:QString filters = "CSV(*.csv);;All files (*.*)"; QString defaultFilter = "CSV(*.csv);"; QString fileName = QFileDialog::getSaveFileName(0, QObject::tr("Salva"), QDir::homePath(), filters, &defaultFilter); if (!fileName.isNull()) { qDebug() << fileName; }
è normale??
dove sbaglio?? -
ho provato anche questo codice:
QStringList filters; filters << "CSV (*.csv)" << "All files (*.*)"; QFileDialog fd(0, tr("Salva"), QDir::homePath()); fd.setAcceptMode(QFileDialog::AcceptSave); fd.setNameFilters(filters); if (fd.exec() == QDialog::Accepted) { QString selectedFilter = fd.selectedNameFilter(); QString fileName = fd.selectedFiles()[0]; qDebug() << selectedFilter << " " << fileName; }
il risultato è questo:
"CSV (*.csv)" "/home/matte/lkjhkòljhkjlh"
in sostanza manca l'estensione nel nome dile file.
se lo andassi a salvare, lo salverei sbagliato. -
molto strano, a me questo codice
#include <QFileDialog> #include <QApplication> #include <QDebug> int main(int argc, char *argv[]) { QApplication app(argc,argv); QString filters = "CSV(*.csv);;All files (*.*)"; QString defaultFilter = "CSV(*.csv);"; QString fileName = QFileDialog::getSaveFileName(0, QObject::tr("Salva"), QDir::homePath(), filters, &defaultFilter); if (!fileName.isNull()) { qDebug() << fileName; } return app.exec(); }
stampa
"C:/temp/bhabvba.csv"
che versione di Qt usi?
-
ciao!
al momento ho la 5.7.1.
qtcreator alla versione 4.2.0. -
Molto strano. Io ho provato Qt 5.8 e Qt 5.5.1 e entrambi funzionano.
Io sono sotto widows, tu?P.S.
QString defaultFilter = "CSV(*.csv);";
dovrebbe essereQString defaultFilter = "CSV(*.csv)";
ma non credo sia la causa del problema -
ciao!
allora, sto continuando a fare varie prove.
questo mette l'estensione, ma se poi scelgo XLS, sempre csv mette:QString fileName; QStringList filters; filters << "CSV(*.csv)" << "XLS(*.xls)" << "All files(*.*)"; QFileDialog fd(0, QObject::tr("Salva"), QDir::homePath()); fd.setAcceptMode(QFileDialog::AcceptSave); fd.setNameFilters(filters); fd.setDefaultSuffix(".csv"); if (fd.exec() == QDialog::Accepted) { fileName = fd.selectedFiles()[0]; } qDebug() << fileName;
questo invece, facendo la modifica che mi hai detto, continua a non prendere l'estensione:
QString filters = "CSV(*.csv);;All files (*.*)"; QString defaultFilter = "CSV(*.csv)"; QString fileName = QFileDialog::getSaveFileName(0, QObject::tr("Salva"), QDir::homePath(), filters, &defaultFilter); if (!fileName.isNull()) { qDebug() << fileName; }
come OS, uso linux.
potrebbe essere un bug?? -
al momento l'unica soluzione che ho trovato è questa:
QString fileName; QStringList filters; filters << "CSV(*.csv)" << "XLS(*.xls)" << "All files(*.*)"; QFileDialog fd(0, QObject::tr("Salva"), QDir::homePath()); fd.setAcceptMode(QFileDialog::AcceptSave); fd.setNameFilters(filters); if (fd.exec() == QDialog::Accepted) { fileName = fd.selectedFiles()[0]; if (fd.selectedNameFilter() == "CSV(*.csv)") { fileName.append(".csv"); } else if (fd.selectedNameFilter() == "XLS(*.xls)") { fileName.append(".xls"); } } return fileName;
non è "bella", lo so.
ma sennò non c'è verso di fargli prendere l'estensione.
ho guardato in lungo e in largo, e pare che sia un problema su OS linux.