文章目录

  • 1 文本编辑器实现复制、剪切、粘贴、撤销、重做操作
    • 1.1 功能实现
    • 1.2 界面状态维护

1 文本编辑器实现复制、剪切、粘贴、撤销、重做操作

1.1 功能实现

编辑器中的常规编辑交互功能:

QPlainTextEdit提供了丰富的交互功能接口:

信号与槽的连接:

我们只需要在菜单栏或者工具栏创建的事件进行信号与槽的绑定即可:

1.2 界面状态维护

文本编辑器中的界面状态需要我们手工进行维护:

  • 不是任何时候都能进行复制、粘贴、撤销、重做。
    QPlainTextEdit能够发送与界面状态相关的信号:

    实现步骤比较简单:
  1. 连接界面状态信号到自定义槽函数。
bool MainWindow::initMainEditor()
{bool ret = true;mainEditor.setParent(this);connect(&mainEditor, SIGNAL(textChanged()), this, SLOT(onTextChanged()));connect(&mainEditor, SIGNAL(copyAvailable(bool)), this, SLOT(onCopyAvailable(bool)));connect(&mainEditor, SIGNAL(redoAvailable(bool)), this, SLOT(onRedoAvailable(bool)));connect(&mainEditor, SIGNAL(undoAvailable(bool)), this, SLOT(onUndoAvailable(bool)));setCentralWidget(&mainEditor);return ret;
}
  1. 通过文本信息找到对应的QAction对象。
QAction* MainWindow::findMenuBarAction(QString text)
{QAction* ret = NULL;const QObjectList& list = menuBar()->children();for(int i=0; i<list.count(); i++){QMenu* menu = dynamic_cast<QMenu*>(list[i]);if( menu != NULL ){QList<QAction*> actions = menu->actions();for(int j=0; j<actions.count(); j++){if( actions[j]->text().startsWith(text) ){ret = actions[j];break;}}}}return ret;
}QAction* MainWindow::findToolBarAction(QString text)
{QAction* ret = NULL;const QObjectList& list = children();for(int i=0; i<list.count(); i++){QToolBar* toolBar = dynamic_cast<QToolBar*>(list[i]);if( toolBar != NULL ){QList<QAction*> actions = toolBar->actions();for(int j=0; j<actions.count(); j++){if( actions[j]->toolTip().startsWith(text) ){ret = actions[j];break;}}}}return ret;
}
  1. 根据信号标志设置QAction对象的界面状态。
void MainWindow::onCopyAvailable(bool available)
{findMenuBarAction("Copy")->setEnabled(available);findMenuBarAction("Cut")->setEnabled(available);findToolBarAction("Copy")->setEnabled(available);findToolBarAction("Cut")->setEnabled(available);
}void MainWindow::onRedoAvailable(bool available)
{findMenuBarAction("Redo")->setEnabled(available);findToolBarAction("Redo")->setEnabled(available);
}void MainWindow::onUndoAvailable(bool available)
{findMenuBarAction("Undo")->setEnabled(available);findToolBarAction("Undo")->setEnabled(available);
}

参考资料:

  1. QT实验分析教程

文本编辑器实现复制、剪切、粘贴、撤销、重做操作相关推荐

  1. vim 复制/剪切/粘贴/撤销操作

    [背景知识] vim 有 12 个粘贴板,分别是 0.1.2.....9.a.".+:用 :reg 命令可以查看各个粘贴板里的内容.在 vim 中简单用 y 命令只是复制到 "(双 ...

  2. vim选中字符复制/剪切/粘贴

    问题描述: vim 中选中指定字符,进行复制/剪切/粘贴 问题解决: 进入vim中visual模式,visual模式进入,可以有三种方式: (1)在普通模式(normal)下,直接按键 v  就可以进 ...

  3. 5.1 vim介绍 5.2-5.3 vim颜色显示和移动光标、vim一般模式下移动光标 5.4 vim 一般模式下复制剪切粘贴...

    2019独角兽企业重金招聘Python工程师标准>>> 5.1 vim介绍 vim 是 vi 的升级版 vim 是带有颜色显示的 mini安装的系统,一般都不带有vim yum in ...

  4. vb ClipBoard 剪切板应用(复制剪切粘贴)

    代码如下:(谨以参考) Private Sub Command1_Click()     '复制     If Text1.SelText <> "" Then Cli ...

  5. Vim复制(剪切)粘贴操作

    复制(剪切)粘贴 使用y(yank)复制,d(delete)剪切,p(put)将内容粘贴到光标后,P粘贴到光标前. y操作符(operator)表示复制操作,后面接的动作(motion)表示y操作的范 ...

  6. android 自定义画笔,在Android Canvas中使用撤销/重做操作的自定义画笔

    我想使用自定义画笔&撤消/重做操作实现画布绘制应用程序.首先,我的代码完美工作,无需使用自定义画笔(包括撤消/重做操作).根据这个答案How to make custom brush for ...

  7. React中使用富文本编辑器Quill,支持粘贴图片

    最近项目中需要用到富文本编辑器,并且客户明确提出需要实现可以直接截图粘贴到文本框中. 由于我们的前端是用react写的,于是就去参考了知乎的实现,发现知乎的富文本框是可以直接贴图进去的,但由于看不到源 ...

  8. java sendmessage_SendMessage()复制/剪切/粘贴WM_COPYDATA 0x004A

    我不清楚 how to simply send in the Ctrl+x or Ctrl+c command 复制/剪切数据(字符串),但我很确定这是需要的pInvoke . 一个快速的手,任何人? ...

  9. vi文本编辑器中复制,剪切,黏贴与删除及字符的查找与替换

    命令模式下 复制:yy 数字+yy: 6yy(复制当前行以下6行) 8yy(复制当前行以下8行) 删除或者剪切(行数):dd 数字+dd: 剪切或删除当前行以下行数 删除光标处字符:x 数字+x :( ...

最新文章

  1. oracle数据库link格式,Oracle创设DB Link
  2. promo和promotion
  3. Unknown media type in type ‘all/all’ 的解决办法
  4. mysql定时木马_Mysql的语句生成后门木马的方法
  5. python赋值语句的一般格式为_[零基础学Python]赋值,简单也不简单
  6. Kafka核心概念及核心机制
  7. ASP.NET2.0的快速入门站点
  8. python---之round
  9. 空间复杂度怎么算_西餐厅主题餐饮空间设计装修预算怎么算?-雨川
  10. 五方面入手精选数据库审计产品
  11. 【POJ1050+POJ2018+HDOJ6638+牛客1006D】最大子段和问题
  12. 【数值分析】python实现四阶龙格库塔法
  13. WTG--让我们随时随地封装系统!
  14. Anaconda完全卸载教程(Windows10系统)
  15. excel选择符合条件的行
  16. 何小鹏快跑:身家暴涨50亿美元,他还愿坐经济舱吗?
  17. 关于浏览器播放视频的些许理解
  18. d3.js学习笔记-10(布局:树状图、集群图捆、捆图)
  19. Python常用字符编码
  20. 《LeetCode之每日一题》:203.提莫攻击

热门文章

  1. 【工具】云文档办公利器!腾讯文档好评!
  2. 基于并联SVM支持向量机训练HOG特征提取的人员目标提取
  3. tftp环境搭建笔记
  4. 拉格朗日差值法----算法学习
  5. 聊聊flink的logback配置
  6. React16.2的fiber架构
  7. Squid 反向代理服务器配置
  8. 万能的Entry,两个变量的Model/JavaBean再也不用写了!
  9. 读取SBT项目resources目录中的文件
  10. T-SQL查询——数据集之间的运算