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

原创 2016年08月31日 14:58:21

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;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

QML官方系列教程——Qt Quick Dialogs

附网址:http://qt-project.org/doc/qt-5/qtquickdialogs-index.html Qt Quick Dialogs —— Qt Quick对话框 该...

ROS 教程之navigation: 用程序设定导航目标点

在做导航的过程中,目的地都是通过RViz界面手动设置的,很麻烦。那么能否通过程序设置目标点,让机器人自动在几个目标点之间来回循环呢?答案是肯定的,《Ros by Example volumn1》8.5...

ROS的学习(十二)用C++写一个简单的发布者

节点是一个可执行程序,它连接到了ROS的网络系统中。我们将会创建一个发布者,也就是说话者节点,它将会持续的广播一个信息。      改变目录到之前所建立的那个包下: cd ~/catkin_ws/...

Qt -- MainWindow实现文本新建/打开/保存/另存

文地址:-- MainWindow实现文本新建/打开/保存/另存为及字体大小颜色的改变">Qt -- MainWindow实现文本新建/打开/保存/另存为及字体大小颜色的改变作者:阿福 今天用M...
  • pql925
  • pql925
  • 2016年09月27日 14:38
  • 688

qt signal-slot测试代码

  • 2013年12月27日 18:41
  • 4KB
  • 下载

Qml文件的两种加载方式|启动Qt quick app的两种方法

一种是QQmlApplicationEngine搭配Window,例如: [cpp] view plain copy #include   #include     in...

在Qt Quick中一个简单Hello World加载过程

Qt5基本类图: QQmlEngine     QQmlEngine类提供了一个QML引擎,用于管理由QML文档定义的对象层次架构,QML提供了一个默认的QML...

Photoshop脚本 > 另存当前文档

源自:http://coolketang.com/tutorials/menu2lesson5.html 本节将演示如何使用脚本,保存一个文档。首先创建一个空白的脚本文档,并保存在硬盘上某个位置。 ...
  • fzhlee
  • fzhlee
  • 2014年11月17日 13:50
  • 1832

禁止另存网页、屏蔽选中、粘贴、复制、剪切、右键菜单程序代码

1、禁止另存网页,把如下代码加入到网页中 程序代码 2、禁止缓存可以前台HTML使用 程序代码 3、禁止剪切或截屏(ie有效,原理就是清空剪切板),可以禁止简单的截屏。...

可以让阻止网页另存代码有效的日历控件

项目之前采用的MY97日历控件,已足够好用; 但用户要求防止网页另存为功能(限IE6-8),即加入            可是,只要网页引入了MY97的JS,防止功能即失效,所以在网上找...
  • kissqw
  • kissqw
  • 2011年07月20日 10:46
  • 826
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:qt quick开发“文档编辑器”常用的SLOT(保存、加载、另存)代码
举报原因:
原因补充:

(最多只允许输入30个字)