1、替换对话框
替换对话框需求分析
-可复用软件部件
-查找文本框中的指定字符串
-替换单个指定字符串
-替换所有指定字符串
- 点击关闭按钮后隐藏
替换对话框的设计与实现
FindDialog(直达)
替换对话框的界面布局
第一行的布局可以直接继承自FindDialog
2、查找功能的实现
MainWindow与ReplaceDialog之间的关系图
3、编程实验
替换功能的实现 NotePad.pro
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()), this, SLOT(onReplaceClicked()));
connect(&m_replaceAllBtn, SIGNAL(clicked()), 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();//第一次不会替换,会查找,符合Windows上的记事本替换准则
}
}
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);
}
}
4、小结
替换对话框的功能涵盖了查找对话框的功能
替换对话框可以继承自查找对话框
替换功能的实现是基于查找算法完成的
替换对话框是一个可复用的软件部件