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 essere QString 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.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.