关键词:文件打开操作的优化、文件新建操作
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