📄 findfiledialog.cpp
字号:
/******************************************************************************** Copyright (C) 2005-2006 Trolltech ASA. All rights reserved.**** This file is part of the example classes of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file. Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include <QtGui>#include "findfiledialog.h"FindFileDialog::FindFileDialog(QTextEdit *editor, QAssistantClient *assistant, QWidget *parent) : QDialog(parent){ currentAssistantClient = assistant; currentEditor = editor; createButtons(); createComboBoxes(); createFilesTree(); createLabels(); createLayout(); directoryComboBox->addItem(QDir::toNativeSeparators(QDir::currentPath())); fileNameComboBox->addItem("*"); findFiles(); setWindowTitle(tr("Find File"));}void FindFileDialog::browse(){ QString currentDirectory = directoryComboBox->currentText(); QString newDirectory = QFileDialog::getExistingDirectory(this, tr("Select Directory"), currentDirectory); if (!newDirectory.isEmpty()) { directoryComboBox->addItem(QDir::toNativeSeparators(newDirectory)); directoryComboBox->setCurrentIndex(directoryComboBox->count() - 1); update(); }}void FindFileDialog::help(){ currentAssistantClient->showPage(QLibraryInfo::location(QLibraryInfo::ExamplesPath) + QDir::separator() + "assistant/simpletextviewer/documentation/filedialog.html");}void FindFileDialog::openFile(QTreeWidgetItem *item){ if (!item) { item = foundFilesTree->currentItem(); if (!item) return; } QString fileName = item->text(0); QString path = directoryComboBox->currentText() + QDir::separator(); QFile file(path + fileName); if (file.open(QIODevice::ReadOnly)) { QString data(file.readAll()); if (fileName.endsWith(".html")) currentEditor->setHtml(data); else currentEditor->setPlainText(data); } close();}void FindFileDialog::update(){ findFiles(); buttonBox->button(QDialogButtonBox::Open)->setEnabled( foundFilesTree->topLevelItemCount() > 0);}void FindFileDialog::findFiles(){ QRegExp filePattern(fileNameComboBox->currentText() + "*"); filePattern.setPatternSyntax(QRegExp::Wildcard); QDir directory(directoryComboBox->currentText()); QStringList allFiles = directory.entryList(QDir::Files | QDir::NoSymLinks); QStringList matchingFiles; foreach (QString file, allFiles) { if (filePattern.exactMatch(file)) matchingFiles << file; } showFiles(matchingFiles);}void FindFileDialog::showFiles(const QStringList &files){ foundFilesTree->clear(); for (int i = 0; i < files.count(); ++i) { QTreeWidgetItem *item = new QTreeWidgetItem(foundFilesTree); item->setText(0, files[i]); } if (files.count() > 0) foundFilesTree->setCurrentItem(foundFilesTree->topLevelItem(0));}void FindFileDialog::createButtons(){ browseButton = new QToolButton; browseButton->setText(tr("...")); connect(browseButton, SIGNAL(clicked()), this, SLOT(browse())); buttonBox = new QDialogButtonBox(QDialogButtonBox::Open | QDialogButtonBox::Cancel | QDialogButtonBox::Help); connect(buttonBox, SIGNAL(accepted()), this, SLOT(openFile())); connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); connect(buttonBox, SIGNAL(helpRequested()), this, SLOT(help()));}void FindFileDialog::createComboBoxes(){ directoryComboBox = new QComboBox; fileNameComboBox = new QComboBox; fileNameComboBox->setEditable(true); fileNameComboBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); directoryComboBox->setMinimumContentsLength(30); directoryComboBox->setSizeAdjustPolicy( QComboBox::AdjustToMinimumContentsLength); directoryComboBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); connect(fileNameComboBox, SIGNAL(editTextChanged(const QString &)), this, SLOT(update())); connect(directoryComboBox, SIGNAL(currentIndexChanged(const QString &)), this, SLOT(update()));}void FindFileDialog::createFilesTree(){ foundFilesTree = new QTreeWidget; foundFilesTree->setColumnCount(1); foundFilesTree->setHeaderLabels(QStringList(tr("Matching Files"))); foundFilesTree->setRootIsDecorated(false); foundFilesTree->setSelectionMode(QAbstractItemView::SingleSelection); connect(foundFilesTree, SIGNAL(itemActivated(QTreeWidgetItem *, int)), this, SLOT(openFile(QTreeWidgetItem *)));}void FindFileDialog::createLabels(){ directoryLabel = new QLabel(tr("Search in:")); fileNameLabel = new QLabel(tr("File name (including wildcards):"));}void FindFileDialog::createLayout(){ QHBoxLayout *fileLayout = new QHBoxLayout; fileLayout->addWidget(fileNameLabel); fileLayout->addWidget(fileNameComboBox); QHBoxLayout *directoryLayout = new QHBoxLayout; directoryLayout->addWidget(directoryLabel); directoryLayout->addWidget(directoryComboBox); directoryLayout->addWidget(browseButton); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addLayout(fileLayout); mainLayout->addLayout(directoryLayout); mainLayout->addWidget(foundFilesTree); mainLayout->addStretch(); mainLayout->addWidget(buttonBox); setLayout(mainLayout);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -