首页 > 代码库 > 第四十一课、编辑交互功能的实现
第四十一课、编辑交互功能的实现
一、编辑交互功能
1、编辑器中常规的编辑交互功能
2、QPlainTextEdit提供了丰富的交互接口
3、信号与槽的连接
编辑器代码修改:将action触发的信号映射到QPlainTextEdit对象的槽函数
二、文本编辑器中的界面状态
1、不是任何时候都可以复制、粘贴、撤销、重做(比如开始没有数据时)
2、QPlainTextEdit能够发送与界面状态相关的信号
3、实现步骤
(1)、连接界面状态信号到自定义的槽函数
(2)、通过文本信息找到对应的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) { for(int j=0; j<menu->actions().count(); j++) { if(menu->actions()[j]->text().startsWith(text)) { ret = menu->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* tb = dynamic_cast<QToolBar*>(list[i]);//只有工具栏能够转换成功 if(tb != NULL) { for(int j=0; j<tb->actions().count(); j++) { if(tb->actions()[j]->toolTip().startsWith(text))//注意工具栏里面的是toolTip() { ret = tb->actions()[j]; break; } } } } return ret; }
(3)、通过信号标志设置QAction对象的界面状态
void MainWindow::onCopyAvailable(bool available) { QAction* action = findMenuBarAction("Copy"); if(action != NULL) { action->setEnabled(available); } action = findToolBarAction("Copy"); if(action != NULL) { action->setEnabled(available); } action = findMenuBarAction("Cut"); if(action != NULL) { action->setEnabled(available); } action = findToolBarAction("Cut"); if(action != NULL) { action->setEnabled(available); } } void MainWindow::onUndoAvailable(bool available) { QAction* action = findMenuBarAction("Undo"); if(action != NULL) { action->setEnabled(available); } action = findToolBarAction("Undo"); if(action != NULL) { action->setEnabled(available); } } void MainWindow::onRedoAvailable(bool available) { QAction* action = findMenuBarAction("Redo"); if(action != NULL) { action->setEnabled(available); } action = findToolBarAction("Redo"); if(action != NULL) { action->setEnabled(available); } }
(4)、其它修改的地方:将Copy、Cut、Redo、Undo等初始状态设置为false
三、小结
(1)、QPlainTextEdit封装了常用的文本编辑功能
(2)、可以将信号直接连接到QPlainTextEdit的公有槽函数
(3)、界面状态是GUI开发的重点和难点
(4)、Qt中组件的状态信号能够简化界面状态的维护
(5)、主窗口中的组件可以通过遍历的方法找回
第四十一课、编辑交互功能的实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。