关闭

qt quick开发“文档编辑器”常用的SLOT(保存、加载、另存)代码

标签: qt编辑器
114人阅读 评论(0) 收藏 举报
分类:

1、newFile()创建新文件

void MdiChild::newFile()
 {
//设置窗口编号,因为编号一直被保存,所以需要使用静态变量
static int sequenceNumber=1;
//新建文档没有被保存过
isUntitled=true;


//将当前文件命名为未命名文档加编号,编号先使用再加1
curFile=codec->toUnicode("未命名文档%1.txt").arg(sequenceNumber++);


//设置窗口标题,使用[*]可以再文档被更改后在文件名称后显示“*”号
setWindowTitle(curFile+"[*]"+codec->toUnicode("-多文档编辑器"));
//文档更改时发射contentsChanged()信号,执行documentWacModified()槽
connect(document(),SIGNAL(contentsChanged()),this,SLOT(documentWasModified()));


//contentsChanged()信号是QT本身带有的。
 }

2、documentWasModified()判断文件是否修改过了

 void MdiChild::documentWasModified()
 {
//使用setWindowModified()函数设置窗口的更改状态标志“*”,
//如果参数为true,那么就会在标题中的设置了“[*]”号的地方
//显示“*”号,表示该文件已经被修改
setWindowModified(document()->isModified());
 }

3、loadFile()加载文件

 
bool MdiChild::loadFile(const QString &fileName)
 {
//新建QFile对象
QFile file(fileName);
//只读方式打开文件,出错则提示,并返回false
if(!file.open(QFile::ReadOnly|QFile::Text)){
QMessageBox::warning(this,codec->toUnicode("多文档编辑器"),
codec->toUnicode("无法读取文件%1:\n%2.").arg(fileName).arg(file.errorString()));
return false;
}

4、新建文本流对象

//新建文本流对象
QTextStream in(&file);


5、设置鼠标状态

//设置鼠标状态为等待状态
QApplication::setOverrideCursor(Qt::WaitCursor);


6、读取文件内容,并加载

//读取文件的全部文本内容,并添加到编辑器中
setPlainText(in.readAll());


7、恢复鼠标状态

//恢复鼠标状态
QApplication::restoreOverrideCursor();


8、设置当前文件

//设置当前文件
 //读取文件完成后还调用了setCurrentFile()函数
 void MdiChild::setCurrentFile(const QString &fileName)
 {
//canonicalFilePath()可以除去路径中的符号链接,“.”和“..”等符号
curFile=QFileInfo(fileName).canonicalFilePath();
//文件已经被保存了
isUntitled=false;
//文档没有被更改过
document()->setModified(false);
//窗口不显示被更改标志
setWindowModified(false);
//设置窗口标题,userFriendlyCurrentFile()返回文件名
setWindowTitle(userFriendlyCurrentFile()+"[*]");
 }


9、提取文件名

 
QString MdiChild::userFriendlyCurrentFile()
 {
//从文件路径中提取文件名
return QFileInfo(curFile).fileName();
 }

10、保存

 
bool MdiChild::save()
 {
if(isUntitled){
return saveAs();}
else{
return saveFile(curFile);
}


 11、另存

 
bool MdiChild::saveAs()
 {
QString fileName=QFileDialog::getSaveFileName(this,
codec->toUnicode("另存为"),curFile);
//获取文件路径,如果为空,则返回false,否则保存文件
if(fileName.isEmpty())
return false;
return saveFile(fileName);
 }

12、保存至某一文件

 
bool MdiChild::saveFile(const QString &fileName)
 {
QFile file(fileName);
if(!file.open(QFile::WriteOnly|QFile::Text)){
QMessageBox::warning(this,codec->toUnicode("多文档编辑器"),codec->toUnicode("无法写入文件%1:\n%2.")
.arg(fileName).arg(file.errorString()));
return false;
}

13、存文件输出

QTextStream out(&file);
//纯文本文件输出
out<<toPlainText();


14、关闭事件

 
void MdiChild::closeEvent(QCloseEvent*event)
 {
if(maybeSave()){
event->accept();
}else{
event->ignore();
}

15、确定是否保存修改

 bool MdiChild::maybeSave()
 {
if(document()->isModified()){
QMessageBox box;
box.setWindowTitle(codec->toUnicode("多文档编辑器"));
box.setText(codec->toUnicode("是否保存对%1的更改?").arg(userFriendlyCurrentFile()));
box.setIcon(QMessageBox::Warning);
//添加按钮,QMessageBox::YesRole可以表明这个按钮的行为
QPushButton*yesBtn=box.addButton(codec->toUnicode("是(&Y)"),QMessageBox::YesRole);
box.addButton(codec->toUnicode("否(&N)"),QMessageBox::NoRole);
QPushButton*cancelBtn=box.addButton(codec->toUnicode("取消"),QMessageBox::RejectRole);
//弹出对话框,让用户选择是否保存修改,或者取消关闭操作
box.exec();
//如果用户选择是,则返回保存操作的结果;如果选择取消,则返回false
if(box.clickedButton()==yesBtn)
return save();
else if(box.clickedButton()==cancelBtn)
return false;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    博客专栏
    最新评论