替换对话框的逻辑实现,基于前两篇查找对话框

查找对话框与替换对话框是一对同时出现的对话框组件,在本程序中,替换对话框继承自查找对话框,增加了替换功能。

程序设计继承图如下:

替换对话框的逻辑实现,基于前两篇查找对话框
下面我们来看看查找对话框的设计图,来进一步理解查找替换对话框的设计思想
替换对话框的逻辑实现,基于前两篇查找对话框
接着我们来看查找替换对话框具体的排版方式(图一查找对话框,图二替换对话框)

图-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实验分析教程》编写。