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

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

程序设计继承图如下:

在这里插入图片描述
下面我们来看看查找对话框的设计图,来进一步理解查找替换对话框的设计思想
在这里插入图片描述
接着我们来看查找替换对话框具体的排版方式(图一查找对话框,图二替换对话框)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值