第48课 - 替换对话框的设计与实现

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、小结 

替换对话框的功能涵盖了查找对话框的功能 

替换对话框可以继承自查找对话框 

替换功能的实现是基于查找算法完成的 

替换对话框是一个可复用的软件部件 

猜你喜欢

转载自blog.csdn.net/qq_39654127/article/details/81663607