文本编辑器实现复制、剪切、粘贴、撤销、重做操作
发布日期:2021-07-01 04:26:02 浏览次数:2 分类:技术文章

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

文章目录

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[i]); if( menu != NULL ) {
QList
actions = menu->actions(); for(int j=0; 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[i]); if( toolBar != NULL ) {
QList
actions = toolBar->actions(); for(int j=0; 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);}

参考资料:

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

上一篇:任务的挂起与唤醒
下一篇:C++中的override关键字

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月13日 04时38分19秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章