[Qt-interest] Force file extension with QFileDialog::getSaveFileName?

Constantin Makshin cmakshin at gmail.com
Wed Jun 22 19:02:46 CEST 2011


I don't want to insult anyone, but there's a problem with the way those who expect setDefaultSuffix() to affect getSaveFileName() think. There's simply no logic in that — getSaveFileName() is a *static* function, so there's no way it can access non-static object members (just because static functions don't have any object to work with) set by setDefaultSuffix(). It's not specific to Qt or even C++, it's the way static functions work in any programming language. I apologize if that sounds too rude.

As for the question about default extension in getSaveFileName(), in my application I call it this way:

QString fileName = QFileDialog::getSaveFileName(this, tr("Save Technique"), m_technique->fileName(), MainWindow::tr("Production Techniques XML (*.ptx *.ptxml);;All Files (*.*)"));

And if the user doesn't change the filter and doesn't explicitly specify any file extension, "ptx" is added automatically. I.e. if the user types "somefile" into the file name box, fileName will be equal to "somefile.ptx". And this works correctly at least on Windows and GNU/Linux with KDE (once I asked a friend to test the application on Mac OS X and didn't get any complaints related to default extension, but there was no thorough testing on that platform).

On Wednesday, June 22, 2011 03:35:17 PM David Doria wrote:
> > Guys, nothing is wrong with the docu ;) The setDefaultSuffix method only has an impact on a QFileDialog *instance*, but the OP was calling the *static* method which triggers the creation of a *native* file dialog, which might or might not add the suffix by itself already. On Mac the extension is added depending on the current filter, if  the filter happens to be unique (e.g. "PNG (*.png)" as opposed to "Images (*.png, *.jpg, *.bmp)"), on Windows not quite sure, KDE/Gnome native file dialogs apparently don't auto-suffix your filename.
> >
> > That said, I am not even sure whether setDefaultSuffix() has an impact on the *native* file dialog - might be that Qt expands the filename accordingly in "post production" (after the native dialog has returned).
> >
> > It works for sure with the Qt file dialog, but that one has several limitations and disadvantages. One being that the suffix cannot be auto-applied depending on the selected filter (if you want to save under multiple file formats, for instance, and the filter would specify the format such as "Template" or "Document"). Only one suffix can be supplied with setAutoSuffix.
> >
> > Cheers, Oliver
> 
> Hi Oliver, they set me straight on making an instance of the dialog
> right away :)
> 
> I'm not sure I follow the rest of what you said? Would you mind taking
> a look? The example has commented out an attempt with a static method
> (which apparently everyone agrees should not work), another commented
> section shows the attempt with setDefaultSuffix, and the uncommented
> section shows the manual method:
> 
> http://programmingexamples.net/index.php?title=Qt/Widgets/FileDialogDefaultSuffix
> 
> Again the documentation says "This property specifies a string that
> will be added to the filename if it has no suffix already." and I'm
> just not seeing that happen.
> 
> Thanks,
> 
> David
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: This is a digitally signed message part.
Url : http://lists.qt-project.org/pipermail/qt-interest-old/attachments/20110622/cba00d5a/attachment.bin 


More information about the Qt-interest-old mailing list