文本编辑器中替换对话框的设计与实现
发布日期:2021-07-01 04:26:14 浏览次数:2 分类:技术文章

本文共 2463 字,大约阅读时间需要 8 分钟。

文章目录

1 文本编辑器中替换对话框的设计与实现

替换对话框需求分析:

  • 可复用软件部分。
  • 查找文本框中的指定字符串。
  • 替换单个指定字符串。
  • 替换所有指定字符串。

附加需求:

  • 点击关闭按钮后隐藏。
    在这里插入图片描述

替换对话框的设计与实现:

在这里插入图片描述
替换对话框的界面布局:
在这里插入图片描述
替换算法流程图:
在这里插入图片描述
Main Window与ReplaceDialog之间的关系图:
在这里插入图片描述
ReplaceDialog.h:

#ifndef _REPLACEDIALOG_H_#define _REPLACEDIALOG_H_#include "FindDialog.h"class ReplaceDialog : public FindDialog{
Q_OBJECTprotected: 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(); }}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); }}

参考资料:

转载地址:https://muzimin.blog.csdn.net/article/details/105070654 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:文本编辑器实现跳转到指定行的功能
下一篇:计数信号量的获取与释放

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月10日 11时15分28秒