zoukankan      html  css  js  c++  java
  • 第四十九课、文本编辑器项目持续开发------------------狄泰软件学院

    一、开发目标一:指定目标行号并跳转执行

    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('
    ', 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对象反映可见性状态

  • 相关阅读:
    taobao 爬虫基本思路分享
    浅谈python中字典append 到list 后值的改变问题
    滑动验证码验证
    selenium:css_selector定位详解
    01分数规划
    可持久化并查集(草稿)
    后缀自动机求endpos集大小
    伯努利数公式
    HDU 6619 Horse 斜率优化dp
    别人的回文自动机
  • 原文地址:https://www.cnblogs.com/gui-lin/p/6424211.html
Copyright © 2011-2022 走看看