?? finddialog.cpp
字號(hào):
#include <QtGui>
#include "finddialog.h"
FindDialog::FindDialog(QWidget *parent)
: QDialog(parent)
{
bReplace=false;
row=0;
column=0;
model=0;
labelFind = new QLabel(tr("查找內(nèi)容:"));
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("替換內(nèi)容:"));
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("替換內(nèi)容");
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,"","查詢已到達(dá)尾部!");
}
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;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -