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

📄 findfileimpl.cpp

📁 用Qt4编写的linux IDE开发环境
💻 CPP
字号:
/** This file is part of QDevelop, an open-source cross-platform IDE* Copyright (C) 2007  Jean-Luc Biord** This program is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License as published by* the Free Software Foundation; either version 2 of the License, or* (at your option) any later version.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the* GNU General Public License for more details.** You should have received a copy of the GNU General Public License* along with this program; if not, write to the Free Software* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA** Contact e-mail: Jean-Luc Biord <jl.biord@free.fr>* Program URL   : http://qdevelop.org**/#include "findfileimpl.h"#include <QFileDialog>#include <QDir>#include <QLineEdit>#include <QListWidget>#include <QTextStream>#include <QDebug>//FindFileImpl::FindFileImpl( QWidget * parent, QStringList directories, QListWidget *listResult, QListWidget *findLines)        : QDialog(parent), m_parent(parent), m_listResult(listResult), m_listLines(findLines){    setupUi(this);    // BK - store last entered search on the top.    textFind->setInsertPolicy(QComboBox::InsertAtTop);    for (int i=0; i<directories.count(); i++)        comboFindIn->addItem(directories.at(i)+"/");            //initialize the variable used to remember where we are in the recursive search algorithm    m_recursiveDepth=0;}//void FindFileImpl::setDefaultWord( QString s) {    defaultWord=s;}//void FindFileImpl::showEvent(QShowEvent* _pEvent){    // BK - put focus on textFind and select previous search word    textFind->setFocus();    QLineEdit* pLineEdit = textFind->lineEdit();        //set the default word if existing    if(!defaultWord.isEmpty()) {        pLineEdit->setText(defaultWord);		defaultWord.clear();    }        //select the displayed word    pLineEdit->setSelection(0, pLineEdit->text().count());    QWidget::showEvent(_pEvent);}//void FindFileImpl::on_chooseDirectoryButton_clicked(){    QString s = QFileDialog::getExistingDirectory(                    m_parent,                    tr("Choose a directory"),                    QDir::homePath(),                    QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks );    if ( s.isEmpty() )    {        // Cancel clicked        return;    }    comboFindIn->addItem(s);    comboFindIn->setCurrentIndex( comboFindIn->count()-1 );}//void FindFileImpl::on_findButton_clicked(){    // BUG when button Find/Close is pressed, textFind doesn't remember last entered string.    if ( !comboFindIn->count() || textFind->currentText().isEmpty() )        return;    if ( findButton->text() == tr("&Find") )    {        if ( textFind->findText( textFind->currentText() ) == -1 )        {            textFind->addItem( textFind->currentText() );        }        findButton->setText(tr("&Stop"));        closeButton->setEnabled( false );        m_stop = false;        m_listResult->clear();        m_listLines->clear();    }    else    {        findButton->setText(tr("&Find"));        closeButton->setEnabled( true );        m_stop = true;    }    find( comboFindIn->currentText() );    if ( m_listResult->count() )    {        m_listResult->setItemSelected( m_listResult->item(0), true);        m_listLines->addItems( m_listResult->item(0)->data(Qt::UserRole).toStringList() );    }    findButton->setText(tr("&Find"));    closeButton->setEnabled( true );}//void FindFileImpl::find( QString directory ){    //save the folder only if the search is just beginning    if(m_recursiveDepth==0) {        m_searchDirectory=directory;    }    m_recursiveDepth++; //search is one-level deeper        QDir dir(directory);    QString filterNames = comboFileTypes->currentText();    filterNames.remove(" ");    QFileInfoList list = dir.entryInfoList(filterNames.split(";"), QDir::AllDirs | QDir::Files | QDir::NoSymLinks | QDir::NoDotAndDotDot);    foreach(QFileInfo fileInfo, list)    {        qApp->processEvents();        if ( m_stop )            return;        if ( fileInfo.isFile() )        {            findInFile( fileInfo.absoluteFilePath() );        }        else if ( checkRecursive->isChecked() )// Directory        {            find( fileInfo.absoluteFilePath() );        }    }        //search is one-level less deep    m_recursiveDepth--;}//void FindFileImpl::findInFile( QString filename ){    QFile file(filename);    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))        return;    //    QRegExp exp;    if ( checkWholeWords->isChecked() )        exp.setPattern( "\\b"+textFind->currentText()+"\\b");    else        exp.setPattern( textFind->currentText());    exp.setCaseSensitivity((Qt::CaseSensitivity) checkCase->isChecked());    //    QTextStream in(&file);    int numLine = 0;    QStringList lines;    while (!in.atEnd())    {        numLine++;        QString line = in.readLine();        if ( line.contains(exp) )        {            lines << tr("Line")+" "+QString::number(numLine)+" : "+line;        }    }    file.close();    if ( lines.count() )    {        //display only the relative path        m_listResult->addItem( tr("File")+" : "+filename.mid(m_searchDirectory.size()) );        QListWidgetItem *item = m_listResult->item(m_listResult->count()-1);        item->setData(Qt::UserRole, QVariant(lines) );                //complete filename (used in slotDoubleClickFindLines)        item->setData(Qt::UserRole+1, QVariant(filename) );    }}//

⌨️ 快捷键说明

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