PDA

View Full Version : QFileDialog set default name



Talei
13th June 2012, 15:00
Hello,
How to set default file name for Qt QFileDialog (not the native one)?

mvuori
14th June 2012, 19:10
I don't know, but typing qfiledialog default filename to Google returns this:
http://www.qtcentre.org/threads/18402-How-set-default-file-to-save-in-QFileDialog

...which gives you something to try.

Talei
15th June 2012, 10:09
This is for the native dialogs, i.e. static function of QFileDialog like getSaveFileName etc. and when path PLUS file name is passed as the argument for start location/path then that file name is automatically filed with dialog file name. (and I have that working fine).

What I ask is how to set default QFileDialog (i.e. Qt dialog) file name. In src I couldn't find any way to access that line edit for file name.

EDIT:
------------------------
Because copy is disabled in QFileDialog I can't access the d pointer to set Ui line edit text for file name.
Modifying src is trouble some, because that force to redistribute modified Qt libs, also (I didn't checked it so maybe Im wrong) QFileDialog can be customized to disable this lineEdit so...

What I did, to set custom file name in QFileDialog (Qt one not the native one) is this:


class myQFileDialog : public QFileDialog
{
Q_OBJECT
public:
explicit myQFileDialog(QWidget *parent = 0);

void initLineEdit(const QString initFileName) {
QList<QLineEdit*> lineEdits = this->findChildren<QLineEdit*>();

for (int i = 0; i < lineEdits.count(); ++i)
if (QString::compare(lineEdits.at(i)->objectName(), "fileNameEdit", Qt::CaseInsensitive) == 0) {
lineEdits.at(i)->setText(initFileName);
return;
}
}

signals:

public slots:

};

Note:
If trolls decide to change name of the line edit from fileNameEdit to anything else then this function will simply dont work the way it suppose to.

ChrisW67
16th June 2012, 00:02
QFileDialog will always use a native dialog if it can: no different to the static functions. QFileDialog will give you a non-native dialog if you are using slots in a sub-class or if you tell it explicitly not to use a native one.

Anyway, this seems to answer your original question:


#include <QtGui>
#include <QDebug>

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

QFileDialog dialog;
dialog.setOptions(QFileDialog::DontUseNativeDialog ); // with or without this
dialog.setFileMode(QFileDialog::AnyFile);
dialog.setAcceptMode(QFileDialog::AcceptSave);
dialog.setDirectory(".");
dialog.selectFile("somefile.txt"); // magic happens here
int ret = dialog.exec();
if (ret == QDialog::Accepted)
qDebug() << dialog.selectedFiles();
else
qDebug() << "Cancelled :(";

return app.exec();
}

Talei
16th June 2012, 05:45
Thanks that's exactly what I was looking for.
I know setOption() and I'm using it to get (not by mistake but on purpose) Qt dialogs.
Doc about selectFile() didn't specify that this will populate lineedit so I skipped that function... eh.

voidbroken
24th February 2016, 10:59
hello everyone
why getSaveFileName don't set default save filename like UUID? it's empty


QString strSaveFile =QFileDialog::getSaveFileName(0, "save", "./44aa756f-6c62-443d-a606-b758fde7e851.txt", "All Files(*.*)", 0, 0);

d_stranz
24th February 2016, 16:20
why getSaveFileName don't set default save filename like UUID? it's empty

Because you are using the method incorrectly. The third argument is the initial directory, not the default file name. There is no way to specify the default file name using the QFileDialog static methods; if you want that, you must use the mechanism described in Chris's original answer in this thread.

voidbroken
25th February 2016, 06:38
sorry, i can't show detail.

Qt version: Qt 5.5.1 MinGW 32bit
OS: win7 64bit

in qt5.5.1 assistant,

QString QFileDialog::getSaveFileName(QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0)

This is a convenience static function that will return a file name selected by the user. The file does not have to exist.

It creates a modal file dialog with the given parent widget. If parent is not 0, the dialog will be shown centered over the parent widget.

The file dialog's working directory will be set to dir. If dir includes a file name, the file will be selected. Only files that match the filter are shown. The filter selected is set to selectedFilter. The parameters dir, selectedFilter, and filter may be empty strings. Multiple filters are separated with ';;'. For instance:
The options argument holds various options about how to run the dialog, see the QFileDialog::Option enum for more information on the flags you can pass.

The default filter can be chosen by setting selectedFilter to the desired value.

The dialog's caption is set to caption. If caption is not specified, a default caption will be used.

On Windows, and OS X, this static function will use the native file dialog and not a QFileDialog.

On Windows the dialog will spin a blocking modal event loop that will not dispatch any QTimers, and if parent is not 0 then it will position the dialog just below the parent's title bar. On OS X, with its native file dialog, the filter argument is ignored.

On Unix/X11, the normal behavior of the file dialog is to resolve and follow symlinks. For example, if /usr/tmp is a symlink to /var/tmp, the file dialog will change to /var/tmp after entering /usr/tmp. If options includes DontResolveSymlinks the file dialog will treat symlinks as regular directories.

Warning: Do not delete parent during the execution of the dialog. If you want to do this, you should create the dialog yourself using one of the QFileDialog constructors.


so, i test for this


QString fileName = QFileDialog::getSaveFileName(0, "Save File","./abc.txt","*.*", 0, 0);

the default name exists.
but


QString fileName = QFileDialog::getSaveFileName(0, "Save File","./D99882DA-893E-4054-9344-FBF29E774780.txt","*.*", 0, 0);

the default name is empty, same as all like UUID's fileName;
so why ? thanks.

d_stranz
25th February 2016, 17:01
the default name is empty, same as all like UUID's fileName; so why ? thanks.

Sorry, I did not see the part in the docs about using a file name as part of the dir string. My mistake.

One other thing that it wrong is the way your specify the filter string. The filter should be something like "All files (*.*)". Maybe the file dialog is unable to parse the "*.*" string you are giving it.

Otherwise, I do not know why there is a problem with using a GUID as the default filename.

voidbroken
26th February 2016, 09:36
so, i find the reason
11745
thinking....

https://bugreports.qt.io/browse/QTBUG-33962
https://bugreports.qt.io/browse/QTBUG-51373

voidbroken
24th March 2016, 02:10
i commited the bug : https://bugreports.qt.io/browse/QTBUG-51373


so, i find the reason
11745
thinking....

https://bugreports.qt.io/browse/QTBUG-33962
https://bugreports.qt.io/browse/QTBUG-51373