關(guān)鍵詞:文件打開操作的優(yōu)化纱新、文件新建操作
1. 問題:如何判斷是否存在未保存的數(shù)據(jù)同波?
Qt中QPlainTextEdit
能夠觸發(fā)與編輯操作相關(guān)的信號:
void textChanged()
:字符發(fā)生變化時(shí)觸發(fā)
解決方案:
1)定義槽函數(shù)void onTextChanged()
2)映射textChanged()
到槽函數(shù)
3)定義成員變量bool m_isTextChanged = false;
4)文本框中的字符發(fā)生變化時(shí):m_isTextChanged = true;
5)當(dāng)m_isTextChanged
為真,則存在未保存的數(shù)據(jù)
2. 文件打開操作的優(yōu)化
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. 小結(jié)
- 文本編輯組件能夠觸發(fā)與編輯操作相關(guān)的信號
-
textChanged()
信號能夠用于檢測數(shù)據(jù)變化 - 文本編輯器項(xiàng)目中需要設(shè)置狀態(tài)變量
- 功能間的交互通過狀態(tài)變量完成
聲明:此文章僅是本人在學(xué)習(xí)狄泰QT實(shí)驗(yàn)分析課程所做的筆記,文章中包含狄泰軟件資料內(nèi)容向楼,一切版權(quán)歸狄泰軟件所有!
實(shí)驗(yàn)環(huán)境:ubuntu10 + Qt Creator2.4.1 + Qt SDK 4.7.4