首页 > 代码库 > 第四十九课、文本编辑器项目持续开发
第四十九课、文本编辑器项目持续开发
一、开发目标一:指定目标行号并跳转执行
1、用户需求
(1)、提示输入对话框
(2)、用户可输入目标行号
(3)、确定后光标跳转到指定行
2、行间跳转算法设计
(1)、通过输入对话框获取目标行号
(2)、查找换行符的位置计算目标行的第一个字符字符下标
(3)、通过QCursor定位到目标行
void MainWindow::onEditGoto() { bool ok = false; int ln = QInputDialog::getInt(this, "转到", "行号: ", 1, 1, mainEdit.document()->lineCount(), 1, &ok);//第一步 if(ok) { QString text = mainEdit.toPlainText(); QTextCursor c = mainEdit.textCursor(); int pos = 0; int next = -1; for(int i=0; i<ln; i++)//第二步 { pos = next + 1;//最后一个换行符的下一个字符就是目标行的第一个字符 next = text.indexOf(‘\n‘, pos); } c.setPosition(pos);//第三步 mainEdit.setTextCursor(c); } }
二、开发目标二:设置工具栏和状态栏的可见性
1、实现思路
(1)、通过setVisible()设置可见性
(2)、更新界面上QAction对象的状态
A、菜单中的QAction是否可以勾选
B、工具栏中的QAction对象是否按下
void MainWindow::onViewStatusBar() { QStatusBar* sb = statusBar(); bool visible = sb->isVisible(); sb->setVisible(!visible); QAction* action = findMenuBarAction("状态栏"); if(action != NULL) { action->setChecked(!visible); } action = findToolBarAction("状态栏"); if(action != NULL) { action->setChecked(!visible); } } void MainWindow::onViewToolBar() { const QObjectList& list = children(); for(int i = 0; i<list.count(); i++) { QToolBar* tb = dynamic_cast<QToolBar*>(list[i]); if(tb != NULL) { bool visible = tb->isVisible(); tb->setVisible(!visible); QAction* action = findMenuBarAction("工具栏"); if(action != NULL) { action->setChecked(!visible); } action = findToolBarAction("工具栏"); if(action != NULL) { action->setChecked(!visible); } break; } } }
发现了一个Bug , findMenuBarAction函数无法正确使用,目前还找不到问题
三、小结
(1)、通过输入对话框获取目标行号并实现行间跳转
(2)、根据用户操作状态控制状态栏和工具栏的可见性
(3)、菜单和工具栏中的QAction对象反映可见性状态
第四十九课、文本编辑器项目持续开发
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。