36_文本编辑器中的功能交互

关键词:文件打开操作的优化、文件新建操作

1. 问题:如何判断是否存在未保存的数据?

Qt中QPlainTextEdit能够触发与编辑操作相关的信号:
void textChanged():字符发生变化时触发
解决方案:
1)定义槽函数void onTextChanged()
2)映射textChanged()到槽函数
3)定义成员变量bool m_isTextChanged = false;
4)文本框中的字符发生变化时:m_isTextChanged = true;
5)当m_isTextChanged,则存在未保存的数据

2. 文件打开操作的优化

void MainWindow::preEditorChange()
{
    if ( m_isTextChanged )
    {
        int r = showQueryMessage("Do you want to save the changes to file?");

        switch(r)
        {
        case QMessageBox::Yes:
            saveCurrentData(m_filePath);
            break;
        case QMessageBox::No:
            m_isTextChanged = false;
            break;
        case QMessageBox::Cancel:
            break;
        }
    }
}

void MainWindow::onFileOpen()
{
    preEditorChange();

    if( !m_isTextChanged )
    {
        QString path = showFileDialog(QFileDialog::AcceptOpen, "Open");

        if( path != "")
        {
            QFile file(path);

            if( file.open(QIODevice::ReadOnly | QIODevice::Text))   //文件打开成功
            {
                mainEditor.setPlainText(QString(file.readAll()));

                file.close();

                m_filePath = path;

                m_isTextChanged = false;

                setWindowTitle("NotePad - [" + m_filePath + "]");
            }
            else        // 文件打开失败,弹出对话框提示
            {
                showErrorMessage(QString("Open file error! \n\n") + "\"" + path + "\"");
            }
        }
    }
}

3. 文件新建操作

void MainWindow::onFileNew()
{
    preEditorChange();

    if( !m_isTextChanged )
    {
        mainEditor.clear();

        setWindowTitle("NotePad -[ New ]");

        m_filePath = "";

        m_isTextChanged = false;
    }
}

4. 小结

  • 文本编辑组件能够触发与编辑操作相关的信号
  • textChanged()信号能够用于检测数据变化
  • 文本编辑器项目中需要设置状态变量
  • 功能间的交互通过状态变量完成

声明:此文章仅是本人在学习狄泰QT实验分析课程所做的笔记,文章中包含狄泰软件资料内容,一切版权归狄泰软件所有!
实验环境:ubuntu10 + Qt Creator2.4.1 + Qt SDK 4.7.4

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,307评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,898评论 18 399
  • Qt 学习之路 2(1):序(Qt 学习之路 2(1):序) Qt 学习之路 2(2):Qt 简介(Qt 学习之路...
    TMAC_EAH阅读 4,993评论 0 8
  • 看到很多人把自己的感受写在简书上,就像一本写了很多各异的大情小绪的牛皮日记本。这让我忍不住想留出一块自己的小地盘。...
    Mona_0815阅读 1,040评论 0 0
  • 时间过得真快啊!又是一年一度的端午节。 记得小时候,端午节是我最喜欢的节日之一。在家乡,端午节有很多的习俗,门窗要...
    雪绒花香阅读 3,226评论 0 0