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

📄 finddialog.cpp

📁 跨平台,多数据库查看编辑和查询工具,平台支持windows,linux,数据库支持oracle,odbc,mysql,slite等
💻 CPP
字号:

#include <QtGui>

#include "finddialog.h"

FindDialog::FindDialog(QWidget *parent)
    : QDialog(parent)
{
    bReplace=false;
    row=0;
    column=0;
    model=0;

    labelFind = new QLabel(tr("查找内容:"));
    lineEdit = new QLineEdit;
    labelFind->setBuddy(lineEdit);
    lineEdit->setMinimumSize(300, 10);
    tableView=qobject_cast<QTableView *>(parent);
    model=qobject_cast<QSqlQueryModel *>(tableView->model());
    //lineEdit->setSizePolicy(QSizePolicy::QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed)); 
    
    label = new QLabel(tr("替换内容:"));
    lineEditReplace = new QLineEdit;
    label->setBuddy(lineEditReplace);
    

    caseCheckBox = new QCheckBox(tr("&C.大小写敏感"));
    fromStartCheckBox = new QCheckBox(tr("从头开始查找"));
    fromStartCheckBox->setChecked(true);
    

    findButton = new QPushButton(tr("&A.查找所有"));
    findButton->setDefault(true);
    connect(findButton,SIGNAL(clicked()),this,SLOT(findAll()));

    findNextButton = new QPushButton(tr("&F.查找"));
    findNextButton->setDefault(false);
    connect(findNextButton,SIGNAL(clicked()),this,SLOT(findNext()));
    
    //moreButton = new QPushButton(tr("&More"));
    //moreButton->setCheckable(true);
    //moreButton->setAutoDefault(false);
    //moreButton->hide();
    

    buttonBox = new QDialogButtonBox(Qt::Vertical);
    buttonBox->addButton(findButton, QDialogButtonBox::ActionRole);
    	buttonBox->addButton(findNextButton, QDialogButtonBox::ActionRole);
    //buttonBox->addButton(moreButton, QDialogButtonBox::ActionRole);
    	//moreButton->hide();

    //extension = new QWidget;

    wholeWordsCheckBox = new QCheckBox(tr("整词查找"));
    
    backwardCheckBox = new QCheckBox(tr("向前查找"));
    searchSelectionCheckBox = new QCheckBox(tr("Search se&lection"));
    searchSelectionCheckBox->hide();

    //connect(moreButton, SIGNAL(toggled(bool)), extension, SLOT(setVisible(bool)));

    QVBoxLayout *extensionLayout = new QVBoxLayout;
    extensionLayout->setMargin(0);
    //extensionLayout->addWidget(wholeWordsCheckBox);
    //extensionLayout->addWidget(backwardCheckBox);
    //extensionLayout->addWidget(searchSelectionCheckBox);
    //extension->setLayout(extensionLayout);

    QGridLayout *topLeftLayout = new QGridLayout;
    topLeftLayout->addWidget(labelFind,0,0);
    topLeftLayout->addWidget(lineEdit,0,1);
    topLeftLayout->addWidget(label,1,0);
    topLeftLayout->addWidget(lineEditReplace,1,1);
    //topLeftLayout->setGeometry(QRect(0,0,400,100));

    QVBoxLayout *leftLayout = new QVBoxLayout;
    leftLayout->addLayout(topLeftLayout);
    //leftLayout->addWidget(caseCheckBox);
    //leftLayout->addWidget(fromStartCheckBox);
    leftLayout->addStretch(1);

    QGridLayout *mainLayout = new QGridLayout;
    mainLayout->setSizeConstraint(QLayout::SetFixedSize);
    mainLayout->addLayout(leftLayout, 0, 0);
    mainLayout->addWidget(buttonBox, 0, 1);
    //mainLayout->addWidget(extension, 1, 0, 1, 2);
    mainLayout->addLayout(extensionLayout,1,0,1,2);
    setLayout(mainLayout);
    
     resize(QSize(400,120));
     QDesktopWidget desktop;
     QWidget * screen=desktop.screen();
     this->move(QPoint((screen->width()-width())/2,(screen->height()-height())/2));

    setWindowTitle(tr("查找"));
    //extension->hide();
}

void FindDialog::showEvent ( QShowEvent * event )
{
 QShowEvent * e=event ;
	lineEdit->setFocus();
	lineEdit->setSelection (0,lineEdit->text().length());
}

void FindDialog::setFindMode()
{
	lineEditReplace->show();
	label->hide();
	findButton->setText("查找所有");
	findNextButton->setText("查找");
	lineEditReplace->hide();
	setWindowTitle("查找");
	bReplace=false;
	row=0;
	column=0;
}

void FindDialog::setReplaceMode()
{
	lineEditReplace->show();
	label->setText("替换内容");
	label->show();
	findButton->setText("替换所有");
	findNextButton->setText("替换");
	setWindowTitle("替换");
	lineEditReplace->show();
	bReplace=true;
}


void FindDialog::findAll()
{
	tableView->clearSelection();
	QString str=lineEdit->text();
	row=0;
	column=0;
	QApplication::setOverrideCursor(Qt::WaitCursor);
	while(findNext(str))
	{
		//qApp->processEvents();
	}
	QApplication::restoreOverrideCursor();


}


void FindDialog::findNext()
{
	QString str=lineEdit->text();	
	QItemSelectionModel *selection=tableView->selectionModel();
	if(!selection)
	{
		return;
	}
	//row=selection->currentIndex().row();
	//column=selection->currentIndex().column();
	//qWarning("findnext %d,%d %d",row,column,);
	if(selection->currentIndex().column()<model->record().count())
	{
		//qWarning("findnext1 %d,%d",row,column);
		row=selection->currentIndex().row();
		column=selection->currentIndex().column()+1;
	}
	else
	{
		//qWarning("findnext2 %d,%d",row,column);
		row=selection->currentIndex().row()+1;
		column=0;
	}
	
	
	if(!findNext(str))
		QMessageBox::warning(this,"","查询已到达尾部!");
}


bool FindDialog::findNext(QString strFind)
{
	
	bool bret=false;
	if(strFind.length()==0 || strFind.isNull() || strFind.isEmpty())
		return false;
		
	if(!tableView || !model)
		return false;
		
	//qWarning("findnext %d,%d",row,column);

	if(preStr.toUpper()!=strFind.toUpper())
	{
		//row=0;
		//column=0;
		preStr=strFind;	
	}
	
	for(int i=row;i<model->rowCount();i++)
	{
		for(int j=0;j<model->record().count();j++)
		{
			//qWarning("row:%d column:%d           find row:%d find column:%d  rows:%d columns:%d",row,column,i,j,model->rowCount(),model->record().count());	
			if((i==row && j>=column) || i>row )
			{
				//qWarning("row:%d column:%d           find row:%d find column:%d",row,column,i,j);	
				QModelIndex index=model->index(i,j);
				QString str=model->data(index).toString();
				if(str.toUpper().contains(strFind.toUpper()))
				{
					QItemSelectionModel *selection=tableView->selectionModel();
					selection->setCurrentIndex(index,QItemSelectionModel::Select);
					bret=true;
					if(j<model->record().count()-1)
					{
						row=i;
						column=j+1;
					}
					else//(j==model->record().count()-1)
					{
						row=i+1;
						column=0;
					}
					break;
				}
			}
	  }
	  if(bret)
	  	break;
  }
	
	return bret;
}

⌨️ 快捷键说明

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