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

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

相关文章推荐

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

文地址:-- MainWindow实现文本新建/打开/保存/另存为及字体大小颜色的改变">Qt -- MainWindow实现文本新建/打开/保存/另存为及字体大小颜色的改变作者:阿福 今天用M...

qt signal-slot测试代码

在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
  • 1679

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

项目之前采用的MY97日历控件,已足够好用; 但用户要求防止网页另存为功能(限IE6-8),即加入            可是,只要网页引入了MY97的JS,防止功能即失效,所以在网上找...

QT中代码中与设计器中控件信号与SLOT连接

双击testqt.ui     托一个push button到窗体中,双击,可以输入字符     按F4或 menu->edit->edit signals/slots 定义SLOT   选择...
  • kl222
  • kl222
  • 2012-07-12 10:16
  • 3927

使用Qt开发文本编辑器(二):标签页式文档实现

Qt中相关的类标签页俗称Tab页,Qt提供了QTableWidget用于创建基于Tab页式的文档。使用QTableWidget,我们可以很方便得添加和删除Tab、设置和获取Tab页上面的文字,设置当前...
  • zxywd
  • zxywd
  • 2016-03-11 16:55
  • 421
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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