为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

3.10 实例:在指定文件系统中寻找一个文件

2018-10-05 8页 doc 25KB 6阅读

用户头像

is_672950

暂无简介

举报
3.10 实例:在指定文件系统中寻找一个文件3.10 实例:在指定文件系统中寻找一个文件 #ifndefWINDOW_H #defineWINDOW_H #include class QComboBox; class QDir; class QLabel; class QPushButton; class QTableWidget; class Window:public QDialog { Q_OBJECT public: Window(QWidget *parent=0); private slots: void browse(); v...
3.10  实例:在指定文件系统中寻找一个文件
3.10 实例:在指定文件系统中寻找一个文件 #ifndefWINDOW_H #defineWINDOW_H #include class QComboBox; class QDir; class QLabel; class QPushButton; class QTableWidget; class Window:public QDialog { Q_OBJECT public: Window(QWidget *parent=0); private slots: void browse(); void find(); private: QStringList findFiles(const QDir &directory?? const QStringList &files?? const QString &text); void showFiles(const QDir &directory?? const QStringList &files); QPushButton *createButton(const QString &text?? const char *member); QComboBox *createComboBox(const QString &text = QString()); void createFilesTable(); QComboBox *fileComboBox; QComboBox *textComboBox; QComboBox *directoryComboBox; QLabel *fileLabel; QLabel *textLabel; QLabel *directoryLabel; QLabel *filesFoundLabel; QPushButton *browseButton; QPushButton *findButton; QTableWidget *filesTable; }; #endif #include #include "window.h" Window::Window(QWidget *parent) : QDialog(parent) { browseButton = createButton(tr("&Browse...")?? SLOT(browse())); findButton = createButton(tr("&Find")?? SLOT(find())); fileComboBox = createComboBox(tr("*")); textComboBox = createComboBox(); directoryComboBox = createComboBox(QDir::currentPath()); fileLabel = new QLabel(tr("Named:")); textLabel = new QLabel(tr("Containing text:")); directoryLabel = new QLabel(tr("In directory:")); filesFoundLabel = new QLabel; createFilesTable(); QHBoxLayout *buttonsLayout = new QHBoxLayout; buttonsLayout->addStretch(); buttonsLayout->addWidget(findButton); QGridLayout *mainLayout = new QGridLayout; mainLayout->addWidget(fileLabel?? 0?? 0); mainLayout->addWidget(fileComboBox?? 0?? 1?? 1?? 2); mainLayout->addWidget(textLabel?? 1?? 0); mainLayout->addWidget(textComboBox?? 1?? 1?? 1?? 2); mainLayout->addWidget(directoryLabel?? 2?? 0); mainLayout->addWidget(directoryComboBox?? 2?? 1); mainLayout->addWidget(browseButton?? 2?? 2); mainLayout->addWidget(filesTable?? 3?? 0?? 1?? 3); mainLayout->addWidget(filesFoundLabel?? 4?? 0); mainLayout->addLayout(buttonsLayout?? 5?? 0?? 1?? 3); setLayout(mainLayout); setWindowTitle(tr("Find Files")); resize(700?? 300); } void Window::browse() { QString directory = QFileDialog::getExistingDirectory(this?? tr("Find Files")?? QDir::currentPath()); if (!directory.isEmpty()) { directoryComboBox->addItem(directory); directoryComboBox->setCurrentIndex(directoryComboBox->currentIndex() + 1); } } void Window::find() { files Table->setRowCount(0); QString fileName = fileComboBox->currentText(); QString text = textComboBox->currentText(); QString path = directoryComboBox->currentText(); QDir directory = QDir(path); QStringList files; if (fileName.isEmpty()) fileName = "*"; files = directory.entryList(QStringList(fileName)?? QDir::Files | QDir::NoSymLinks); if (!text.isEmpty()) files = findFiles(directory?? files?? text); showFiles(directory?? files); } QStringList Window::findFiles(const QDir &directory?? const QStringList &files?? const QString &text) { QProgressDialog progressDialog(this); progressDialog.setCancelButtonText(tr("&Cancel")); progressDialog.setRange(0?? files.size()); progressDialog.setWindowTitle(tr("Find Files")); QStringList foundFiles; for (int i = 0; i < files.size(); ++i) { progressDialog.setValue(i); progressDialog.setLabelText(tr("Searching file number %1 of %2...") .arg(i).arg(files.size())); qApp->processEvents(); if (progressDialog.wasCanceled()) break; QFile file(directory.absoluteFilePath(files[i])); if (file.open(QIODevice::ReadOnly)) { QString line; QTextStream in(&file); while (!in.atEnd()) { if (progressDialog.wasCanceled()) break; line = in.readLine(); if (line.contains(text)) { foundFiles << files[i]; break; } } } } return foundFiles; } void Window::showFiles(const QDir &directory?? const QStringList &files) { for (int i = 0; i < files.size(); ++i) { QFile file(directory.absoluteFilePath(files[i])); qint64 size = QFileInfo(file).size(); QTableWidgetItem *fileNameItem = new QTableWidgetItem(files[i]); fileNameItem->setFlags(Qt::ItemIsEnabled); QTableWidgetItem *sizeItem = new QTableWidgetItem(tr("%1 KB") .arg(int((size + 1023) / 1024))); sizeItem->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter); sizeItem->setFlags(Qt::ItemIsEnabled); int row = filesTable->rowCount(); filesTable->insertRow(row); filesTable->setItem(row?? 0?? fileNameItem); filesTable->setItem(row?? 1?? sizeItem); } filesFoundLabel->setText(tr("%1 file(s) found").arg(files.size())); } QPushButton *Window::createButton(const QString &text?? const char *member) { QPushButton *button = new QPushButton(text); connect(button?? SIGNAL(clicked())?? this?? member); return button; } QComboBox *Window::createComboBox(const QString &text) { QComboBox *comboBox = new QComboBox; comboBox->setEditable(true); comboBox->addItem(text); comboBox->setSizePolicy(QSizePolicy::Expanding?? QSizePolicy::Preferred); return comboBox; } void Window::createFilesTable() { filesTable = new QTableWidget(0?? 2); QStringList labels; labels << tr("File Name") << tr("Size"); filesTable->setHorizontalHeaderLabels(labels); filesTable->horizontalHeader()->setResizeMode(0?? QHeaderView::Stretch); filesTable->verticalHeader()->hide(); filesTable->setShowGrid(false); } #include #include "window.h" int main(int argc?? char *argv[]) { QApplication app(argc?? argv); Window window; window.show(); return app.exec(); }
/
本文档为【3&#46;10 实例:在指定文件系统中寻找一个文件】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索