文本编辑器实现复制、剪切、粘贴、撤销、重做操作
发布日期:2021-07-01 04:26:02
浏览次数:2
分类:技术文章
本文共 2233 字,大约阅读时间需要 7 分钟。
文章目录
1 文本编辑器实现复制、剪切、粘贴、撤销、重做操作
1.1 功能实现
编辑器中的常规编辑交互功能:
QPlainTextEdit提供了丰富的交互功能接口: 信号与槽的连接: 我们只需要在菜单栏或者工具栏创建的事件进行信号与槽的绑定即可:1.2 界面状态维护
文本编辑器中的界面状态需要我们手工进行维护:
- 不是任何时候都能进行复制、粘贴、撤销、重做。 QPlainTextEdit能够发送与界面状态相关的信号: 实现步骤比较简单:
- 连接界面状态信号到自定义槽函数。
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;}
- 通过文本信息找到对应的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;}
- 根据信号标志设置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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年04月13日 04时38分19秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
c语言细读之static auto
2019-05-02
ffmpeg开发中的问题(九)
2019-05-02
leetcode-longest common prefix
2019-05-02
tinyhttpd源码学习1
2019-05-02
九度题目1015:还是A+B
2019-05-02
Mongoose API Reference
2019-05-02
hdu2568
2019-05-02
九度题目1505:两个链表的第一个公共结点
2019-05-02
linux下intel 82579LM 网卡驱动安装
2019-05-02
ffmpeg开发中的问题(十二) 一些小点
2019-05-02
python urllib
2019-05-02
APUE初学 环境搭建
2019-05-02
Binary Tree Level Order Traversal
2019-05-02
题目1511:从尾到头打印链表
2019-05-02
ssh无法连接
2019-05-02
常用shell
2019-05-02
最长递增子序列
2019-05-02
apache配置
2019-05-02
linux忘记密码时登录
2019-05-02
修复grub
2019-05-02