⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qfiledialog.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/*!    \since 4.3    Restores the dialogs's layout, history and current directory to the \a state specified.    Typically this is used in conjunction with QSettings to restore the size    from a past session.    Returns false if there are errors*/bool QFileDialog::restoreState(const QByteArray &state){    Q_D(QFileDialog);    int version = 3;    QByteArray sd = state;    QDataStream stream(&sd, QIODevice::ReadOnly);    if (stream.atEnd())        return false;    QByteArray splitterState;    QByteArray headerData;    QList<QUrl> bookmarks;    QStringList history;    QString currentDirectory;    qint32 marker;    qint32 v;    qint32 viewMode;    stream >> marker;    stream >> v;    if (marker != QFileDialogMagic || v != version)        return false;    stream >> splitterState           >> bookmarks           >> history           >> currentDirectory           >> headerData           >> viewMode;    if (!d->qFileDialogUi->splitter->restoreState(splitterState))        return false;    QList<int> list = d->qFileDialogUi->splitter->sizes();    if (list.count() >= 2 && list.at(0) == 0 && list.at(1) == 0) {        for (int i = 0; i < list.count(); ++i)            list[i] = d->qFileDialogUi->splitter->widget(i)->sizeHint().width();        d->qFileDialogUi->splitter->setSizes(list);    }    d->qFileDialogUi->sidebar->setUrls(bookmarks);    setHistory(history);    setDirectory(currentDirectory);    if (!d->qFileDialogUi->treeView->header()->restoreState(headerData))        return false;    setViewMode(ViewMode(viewMode));    return true;}/*!    \reimp*/void QFileDialog::changeEvent(QEvent *e){    Q_D(QFileDialog);    if (e->type() == QEvent::LanguageChange) {        d->retranslateWindowTitle();        d->retranslateStrings();    }    QDialog::changeEvent(e);}void QFileDialogPrivate::retranslateWindowTitle(){    Q_Q(QFileDialog);    if (!useDefaultCaption || setWindowTitle != q->windowTitle())        return;    if (fileMode == QFileDialog::ExistingFiles || fileMode == QFileDialog::ExistingFile)        q->setWindowTitle(QFileDialog::tr("Open"));    if (fileMode == QFileDialog::AnyFile)        q->setWindowTitle(QFileDialog::tr("Save As"));    if (fileMode == QFileDialog::DirectoryOnly || fileMode == QFileDialog::Directory)        q->setWindowTitle(QFileDialog::tr("Find Directory"));    setWindowTitle = q->windowTitle();}void QFileDialogPrivate::retranslateStrings(){    Q_Q(QFileDialog);    /* WIDGETS */    if (defaultFileTypes)        q->setFilter(QFileDialog::tr("All Files (*)"));    QList<QAction*> actions = qFileDialogUi->treeView->header()->actions();    QAbstractItemModel *abstractModel = model;#ifndef QT_NO_PROXYMODEL    if (proxyModel)        abstractModel = proxyModel;#endif    int total = qMin(abstractModel->columnCount(QModelIndex()), actions.count() + 1);    for (int i = 1; i < total; ++i) {        actions.at(i - 1)->setText(QFileDialog::tr("Show ") + abstractModel->headerData(i, Qt::Horizontal, Qt::DisplayRole).toString());    }    /* MENU ACTIONS */    renameAction->setText(QFileDialog::tr("&Rename"));    deleteAction->setText(QFileDialog::tr("&Delete"));    showHiddenAction->setText(QFileDialog::tr("Show &hidden files"));    newFolderAction->setText(QFileDialog::tr("&New Folder"));    qFileDialogUi->retranslateUi(q);}/*!    \internal    set the directory to url*/void QFileDialogPrivate::_q_goToUrl(const QUrl &url){    QModelIndex idx = model->index(url.toLocalFile());    _q_enterDirectory(idx);}/*!    \fn void QFileDialog::setDirectory(const QDir &directory)    \overload*//*!    Sets the file dialog's current \a directory.*/void QFileDialog::setDirectory(const QString &directory){    Q_D(QFileDialog);    if (d->rootPath() == directory)        return;    QModelIndex idx = d->model->index(directory);#ifndef QT_NO_COMPLETER    d->completer->setCompletionPrefix(directory);#endif    QModelIndex root = d->model->setRootPath(directory);    d->qFileDialogUi->newFolderButton->setEnabled(d->model->flags(root) & Qt::ItemIsDropEnabled);    d->setRootIndex(root);    d->qFileDialogUi->listView->selectionModel()->clear();}/*!    Returns the directory currently being displayed in the dialog.*/QDir QFileDialog::directory() const{    Q_D(const QFileDialog);    return QDir(d->rootPath());}/*!    Selects the given \a filename in the file dialog.    \sa selectedFiles()*/void QFileDialog::selectFile(const QString &filename){    Q_D(QFileDialog);    if (filename.isEmpty())        return;    QModelIndex index = d->model->index(filename);    if (!index.isValid()) {        // save as dialog where we want to input a default value        QString text = filename;        if (QFileInfo(filename).isAbsolute()) {            QString current = d->rootPath();            text.remove(current);        }        if (!d->lineEdit()->hasFocus())            d->lineEdit()->setText(text);    } else {        d->qFileDialogUi->listView->selectionModel()->clear();        if (!d->lineEdit()->hasFocus())            d->lineEdit()->setText(index.data().toString());    }}/**    Returns the text in the line edit which can be one or more file names  */QStringList QFileDialogPrivate::typedFiles() const{    QStringList files;    QString editText = lineEdit()->text();    if (editText.contains(QLatin1Char('"'))) {        // " is used to separate files like so: "file1" "file2" "file3" ...        // ### need escape character for filenames with quotes (")        QStringList tokens = editText.split(QLatin1Char('\"'));        for (int i = 0; i < tokens.size(); ++i) {            if ((i % 2) == 0)                continue; // Every even token is a separator            QString name = toInternal(tokens.at(i));            QFileInfo info(name);            // if the filename has no suffix, add the default suffix            if (!defaultSuffix.isEmpty() && !info.isDir() && name.lastIndexOf(QLatin1Char('.')) == -1)                name += QLatin1Char('.') + defaultSuffix;            // a new filename            if ((fileMode == QFileDialog::ExistingFiles) || files.isEmpty()) {                if (info.isAbsolute())                    files.append(name);                else                    files.append(toInternal(rootPath() + QDir::separator() + name));            }        }    } else {        QString name = editText;        QFileInfo info(name);        // if the filename has no suffix, add the default suffix        if (!defaultSuffix.isEmpty() && !info.isDir() && name.lastIndexOf(QLatin1Char('.')) == -1)            name += QLatin1Char('.') + defaultSuffix;        if (info.isAbsolute())            files.append(name);        else            files.append(toInternal(rootPath() + QDir::separator() + name));    }    return files;}/*!    Returns a list of strings containing the absolute paths of the    selected files in the dialog. If no files are selected, or    the mode is not ExistingFiles, selectedFiles() is an empty string list.    \sa selectedFilter(), selectFile()*/QStringList QFileDialog::selectedFiles() const{    Q_D(const QFileDialog);    QModelIndexList indexes = d->qFileDialogUi->listView->selectionModel()->selectedRows();    QStringList files;    for (int i = 0; i < indexes.count(); ++i)        files.append(d->model->filePath(d->mapToSource(indexes.at(i))));    if (files.isEmpty())        files = d->typedFiles();    if (files.isEmpty() && d->fileMode == DirectoryOnly)        files.append(d->model->filePath(d->rootIndex()));    return files;}/*    Makes a list of filters from ;;-separated text.    Used by the mac and windows implementations*/QStringList qt_make_filter_list(const QString &filter){    QString f(filter);    if (f.isEmpty())        return QStringList();    QString sep(QLatin1String(";;"));    int i = f.indexOf(sep, 0);    if (i == -1) {        if (f.indexOf(QLatin1Char('\n'), 0) != -1) {            sep = QLatin1Char('\n');            i = f.indexOf(sep, 0);        }    }    return f.split(sep);}/*!    Sets the filter used in the file dialog to the given \a filter.    If \a filter contains a pair of parentheses containing one or more    of \bold{anything*something}, separated by semicolons, then only the    text contained in the parentheses is used as the filter. This means    that these calls are all equivalent:    \code       dialog.setFilter("All C++ files (*.cpp;*.cc;*.C;*.cxx;*.c++)");       dialog.setFilter("*.cpp;*.cc;*.C;*.cxx;*.c++");    \endcode    \sa setFilters()*/void QFileDialog::setFilter(const QString &filter){    setFilters(qt_make_filter_list(filter));}/*!    Sets the \a filters used in the file dialog.    \code      QStringList filters;      filters << "Image files (*.png *.xpm *.jpg)"              << "Text files (*.txt)"              << "Any files (*)";      QFileDialog dialog(this);      dialog.setFilters(filters);      dialog.exec();    \endcode*/void QFileDialog::setFilters(const QStringList &filters){    Q_D(QFileDialog);    d->defaultFileTypes = (filters == QStringList(QFileDialog::tr("All Files (*)")));    d->qFileDialogUi->fileTypeCombo->clear();    if (filters.isEmpty())        return;    d->qFileDialogUi->fileTypeCombo->addItems(filters);    d->_q_useNameFilter(filters.first());}/*!    Returns the file type filters that are in operation on this file    dialog.*/QStringList QFileDialog::filters() const{    Q_D(const QFileDialog);    QStringList items;    for (int i = 0; i < d->qFileDialogUi->fileTypeCombo->count(); ++i)        items.append(d->qFileDialogUi->fileTypeCombo->itemText(i));    return items;}/*!    Sets the current file type \a filter. Multiple filters can be    passed in \a filter by separating them with semicolons or spaces.    \sa setFilter(), setFilters(), selectedFilter()*/void QFileDialog::selectFilter(const QString &filter){    Q_D(QFileDialog);    int i = d->qFileDialogUi->fileTypeCombo->findText(filter);    if (i >= 0) {        d->qFileDialogUi->fileTypeCombo->setCurrentIndex(i);        d->_q_useNameFilter(d->qFileDialogUi->fileTypeCombo->currentText());    }}/*!    Returns the filter that the user selected in the file dialog.    \sa selectedFiles()*/QString QFileDialog::selectedFilter() const{    Q_D(const QFileDialog);    return d->qFileDialogUi->fileTypeCombo->currentText();}/*!    \property QFileDialog::viewMode    \brief the way files and directories are displayed in the dialog    By default, the \c Detail mode is used to display information about    files and directories.    \sa ViewMode*/void QFileDialog::setViewMode(QFileDialog::ViewMode mode){    Q_D(QFileDialog);    if (mode == Detail)        d->_q_showDetailsView();    else        d->_q_showListView();}QFileDialog::ViewMode QFileDialog::viewMode() const{    Q_D(const QFileDialog);    return (d->qFileDialogUi->stackedWidget->currentWidget() == d->qFileDialogUi->listView->parent() ? QFileDialog::List : QFileDialog::Detail);}/*!    \property QFileDialog::fileMode    \brief the file mode of the dialog

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -