替换对话框的逻辑实现,基于前两篇查找对话框
查找对话框与替换对话框是一对同时出现的对话框组件,在本程序中,替换对话框继承自查找对话框,增加了替换功能。
程序设计继承图如下:
下面我们来看看查找对话框的设计图,来进一步理解查找替换对话框的设计思想
接着我们来看查找替换对话框具体的排版方式(图一查找对话框,图二替换对话框)
图-1
图-2
可以看出,替换对话框在查找替换框原有只是基础上增加了几个组件,也就是替换功能。排版方式并没有变化,接着就是具体的代码实现。
/*ReplaceDialog.h*/
#ifndef REPLACEDIALOG_H
#define REPLACEDIALOG_H
#include "FindDialog.h"
class ReplaceDialog : public FindDialog
{
Q_OBJECT
protected:
QLabel m_replaceLbl;
QLineEdit m_replaceEdit;
QPushButton m_replaceBtn;
QPushButton m_replaceAllBtn;
void initControl();
void connectSlot();
protected slots:
void onReplaceClicked();
void onReplaceAllClicked();
public:
explicit ReplaceDialog(QWidget* parent = 0, QPlainTextEdit* pText = 0);
};
#endif // REPLACEDIALOG_H
/*ReplaceDialog.cpp*/
#include "ReplaceDialog.h"
ReplaceDialog::ReplaceDialog(QWidget* parent, QPlainTextEdit* pText) :
FindDialog(parent, pText)
{
initControl();
connectSlot();
setWindowTitle("Replace");
}
void ReplaceDialog::initControl() //对继承下来的对话框进行排版
{
m_replaceLbl.setText("Replace To:");
m_replaceBtn.setText("Replace");
m_replaceAllBtn.setText("Replace All");
m_layout.removeWidget(&m_matchChkBx);
m_layout.removeWidget(&m_radioGrpBx);
m_layout.removeWidget(&m_closeBtn);
m_layout.addWidget(&m_replaceLbl, 1, 0);
m_layout.addWidget(&m_replaceEdit, 1, 1);
m_layout.addWidget(&m_replaceBtn, 1, 2);
m_layout.addWidget(&m_matchChkBx, 2, 0);
m_layout.addWidget(&m_radioGrpBx, 2, 1);
m_layout.addWidget(&m_replaceAllBtn, 2, 2);
m_layout.addWidget(&m_closeBtn, 3, 2);
}
void ReplaceDialog::connectSlot()
{
connect(&m_replaceBtn, SIGNAL(clicked(bool)), this, SLOT(onReplaceClicked()));
connect(&m_replaceAllBtn, SIGNAL(clicked(bool)), this, SLOT(onReplaceAllClicked()));
}
void ReplaceDialog::onReplaceClicked()
{
QString target = m_findEdit.text();
QString to = m_replaceEdit.text();
if( (m_PText != NULL) && (target != "") && (to != "") )
{
QString selText = m_PText->textCursor().selectedText();
if(selText == target)
{
m_PText->insertPlainText(to);
}
onFindClicked(); //调用查找对话框中的查找功能
}
}
void ReplaceDialog::onReplaceAllClicked()
{
QString target = m_findEdit.text();
QString to = m_replaceEdit.text();
if( (m_PText != NULL) && (target != "") && (to != "") )
{
QString text = m_PText->toPlainText();
text.replace(target, to, m_matchChkBx.isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive);
m_PText->clear();
m_PText->insertPlainText(text);
}
}
实现效果:
[1].参照狄泰软件学院《Qt实验分析教程》编写。