前面已经将界面做好了这里我们为其添加代码实现文本编.docx

上传人:b****2 文档编号:552318 上传时间:2023-04-29 格式:DOCX 页数:16 大小:311.01KB
下载 相关 举报
前面已经将界面做好了这里我们为其添加代码实现文本编.docx_第1页
第1页 / 共16页
前面已经将界面做好了这里我们为其添加代码实现文本编.docx_第2页
第2页 / 共16页
前面已经将界面做好了这里我们为其添加代码实现文本编.docx_第3页
第3页 / 共16页
前面已经将界面做好了这里我们为其添加代码实现文本编.docx_第4页
第4页 / 共16页
前面已经将界面做好了这里我们为其添加代码实现文本编.docx_第5页
第5页 / 共16页
前面已经将界面做好了这里我们为其添加代码实现文本编.docx_第6页
第6页 / 共16页
前面已经将界面做好了这里我们为其添加代码实现文本编.docx_第7页
第7页 / 共16页
前面已经将界面做好了这里我们为其添加代码实现文本编.docx_第8页
第8页 / 共16页
前面已经将界面做好了这里我们为其添加代码实现文本编.docx_第9页
第9页 / 共16页
前面已经将界面做好了这里我们为其添加代码实现文本编.docx_第10页
第10页 / 共16页
前面已经将界面做好了这里我们为其添加代码实现文本编.docx_第11页
第11页 / 共16页
前面已经将界面做好了这里我们为其添加代码实现文本编.docx_第12页
第12页 / 共16页
前面已经将界面做好了这里我们为其添加代码实现文本编.docx_第13页
第13页 / 共16页
前面已经将界面做好了这里我们为其添加代码实现文本编.docx_第14页
第14页 / 共16页
前面已经将界面做好了这里我们为其添加代码实现文本编.docx_第15页
第15页 / 共16页
前面已经将界面做好了这里我们为其添加代码实现文本编.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

前面已经将界面做好了这里我们为其添加代码实现文本编.docx

《前面已经将界面做好了这里我们为其添加代码实现文本编.docx》由会员分享,可在线阅读,更多相关《前面已经将界面做好了这里我们为其添加代码实现文本编.docx(16页珍藏版)》请在冰点文库上搜索。

前面已经将界面做好了这里我们为其添加代码实现文本编.docx

前面已经将界面做好了这里我们为其添加代码实现文本编

前面已经将界面做好了,这里我们为其添加代码,实现文本编辑的功能。

 

首先实现新建文件,文件保存,和文件另存为的功能。

 

(我们先将上次的工程文件夹进行备份,然后再对其进行修改。

在写较大的程序时,经常对源文件进行备份,是个很好的习惯。

) 

在开始正式写程序之前,我们先要考虑一下整个流程。

因为我们要写记事本一样的软件,所以最好先打开windows中的记事本,进行一些简单的操作,然后考虑怎样去实现这些功能。

再者,再强大的软件,它的功能也是一个一个加上去的,不要设想一下子写出所有的功能。

我们这里先实现新建文件,保存文件,和文件另存为三个功能,是因为它们联系很紧,而且这三个功能总的代码量也不是很大。

  

因为三个功能之间的关系并不复杂,所以我们这里便不再画流程图,而只是简单描述一下。

 

新建文件,那么如果有正在编辑的文件,是否需要保存呢?

 

如果需要进行保存,那这个文件以前保存过吗?

如果没有保存过,就应该先将其另存为。

 

下面开始按这些关系写程序。

 

1.打开QtCreator,在File菜单中选择Open,然后在工程文件夹中打开MainWindow.pro工程文件。

 

先在main.cpp文件中加入以下语句,让程序中可以使用中文。

 

在其中加入#include头文件包含,再在主函数中加入下面一行:

 

QTextCodec:

:

setCodecForTr(QTextCodec:

:

codecForLocale()); 

这样在程序中使用中文,便能在运行时显示出来了。

更改后文件如下图。

 

 

2.在mainwindow.h文件中的private下加入以下语句。

 

boolisSaved;//为true时标志文件已经保存,为false时标志文件尚未保存 

QStringcurFile;//保存当前文件的文件名 

voiddo_file_New();//新建文件 

voiddo_file_SaveOrNot();//修改过的文件是否保存 

voiddo_file_Save();//保存文件 

voiddo_file_SaveAs();//文件另存为 

boolsaveFile(constQString&fileName);//存储文件 

这些是变量和函数的声明。

其中isSaved变量起到标志的作用,用它来标志文件是否被保存过。

然后我们再在相应的源文件里进行这些函数的定义。

 

3.在mainwindow.cpp中先加入头文件#include,然后在构造函数里添加以下几行代码。

 

isSaved=false;//初始化文件为未保存过状态 

curFile=tr(“未命名.txt”);//初始化文件名为“未命名.txt” 

setWindowTitle(curFile);//初始化主窗口的标题 

这是对主窗口进行初始化。

效果如下。

 

 

4.然后添加“新建”操作的函数定义。

 

voidMainWindow:

:

do_file_New()//实现新建文件的功能 

do_file_SaveOrNot(); 

isSaved=false; 

curFile=tr(“未命名.txt”); 

setWindowTitle(curFile); 

ui->textEdit->clear();//清空文本编辑器 

ui->textEdit->setVisible(true);//文本编辑器可见 

新建文件,先要判断正在编辑的文件是否需要保存。

然后将新建的文件标志为未保存过状态。

 

5.再添加do_file_SaveOrNot函数的定义。

 

voidMainWindow:

:

do_file_SaveOrNot()//弹出是否保存文件对话框 

if(ui->textEdit->document()->isModified())//如果文件被更改过,弹出保存对话框 

QMessageBoxbox; 

box.setWindowTitle(tr(“警告”)); 

box.setIcon(QMessageBox:

:

Warning); 

box.setText(curFile+tr(”尚未保存,是否保存?

”)); 

box.setStandardButtons(QMessageBox:

:

Yes|QMessageBox:

:

No); 

if(box.exec()==QMessageBox:

:

Yes)//如果选择保存文件,则执行保存操作 

do_file_Save(); 

这个函数实现弹出一个对话框,询问是否保存正在编辑的文件。

 

 

6.再添加“保存”操作的函数定义。

 

voidMainWindow:

:

do_file_Save()//保存文件 

if(isSaved){//如果文件已经被保存过,直接保存文件 

saveFile(curFile); 

else{ 

do_file_SaveAs();//如果文件是第一次保存,那么调用另存为 

对文件进行保存时,先判断其是否已经被保存过,如果没有被保存过,就要先对其进行另存为操作。

 

7.下面是“另存为”操作的函数定义。

 

voidMainWindow:

:

do_file_SaveAs()//文件另存为 

QStringfileName=QFileDialog:

:

getSaveFileName(this,tr(“另存为”),curFile); 

//获得文件名 

if(!

fileName.isEmpty())//如果文件名不为空,则保存文件内容 

saveFile(fileName); 

这里弹出一个文件对话框,显示文件另存为的路径。

 

 

8.下面是实际文件存储操作的函数定义。

 

boolMainWindow:

:

saveFile(constQString&fileName) 

//保存文件内容,因为可能保存失败,所以具有返回值,来表明是否保存成功 

QFilefile(fileName); 

if(!

file.open(QFile:

:

WriteOnly|QFile:

:

Text)) 

//以只写方式打开文件,如果打开失败则弹出提示框并返回 

QMessageBox:

:

warning(this,tr(“保存文件”), 

tr(“无法保存文件%1:

\n%2″).arg(fileName) 

.arg(file.errorString())); 

returnfalse; 

//%1,%2表示后面的两个arg参数的值 

QTextStreamout(&file);  //新建流对象,指向选定的文件 

out<textEdit->toPlainText();  //将文本编辑器里的内容以纯文本的形式输出到流对象中 

isSaved=true; 

curFile=QFileInfo(fileName).canonicalFilePath();//获得文件的标准路径 

setWindowTitle(curFile);//将窗口名称改为现在窗口的路径 

returntrue; 

这个函数实现将文本文件进行存储。

下面我们对其中的一些代码进行讲解。

 

QFilefile(fileName);一句,定义了一个QFile类的对象file,其中filename表明这个文件就是我们保存的的文件。

然后我们就可以用file代替这个文件,来进行一些操作。

Qt中文件的操作和C,C++很相似。

对于QFile类对象怎么使用,我们可以查看帮助。

 

           点击QtCreator最左侧的Help,在其中输入QFile,在搜索到的列表中选择QFile即可。

这时在右侧会显示出QFile类中所有相关信息以及他们的用法和说明。

 

 

// 

我们往下拉,会发现下面有关于怎么读取文件的示例代码。

 

// 

 

// 

再往下便能看到用QTextStream类对象,进行字符串输入的例子。

下面也提到了QFileInfo和QDir等相关的类,我们可以点击它们去看一下具体的使用说明。

 

//

 

上面只是做了一个简单的说明。

以后我们对自己不明白的类都可以去帮助里进行查找,这也许是我们以后要做的最多的一件事了。

对于其中的英文解释,我们最好想办法弄明白它的大意,其实网上也有一些中文的翻译,但最好还是从一开始就尝试着看英文原版的帮助,这样以后才不会对中文翻译产生依赖。

 

      我们这次只是很简单的说明了一下怎样使用帮助文件,这不表明它不重要,而是因为这里不可能将每个类的帮助都解释一遍,没有那么多时间,也没有那么大的篇幅。

而更重要的是因为,我们这个教程只是引你入门,所以很多东西需要自己去尝试。

 

      在以后的教程里,如果不是特殊情况,就不会再对其中的类进行详细解释,文章中的重点是对整个程序的描述,其中不明白的类,自己查看帮助。

 

9.双击mainwindow.ui文件,在图形界面窗口下面的ActionEditor动作编辑器里,我们右击“新建”菜单一条,选择Gotoslot,然后选择triggered(),进入其触发事件槽函数。

 

 

同理,进入其他两个菜单的槽函数,将相应的操作的函数写入槽函数中。

如下。

 

voidMainWindow:

:

on_action_New_triggered()//信号和槽的关联 

do_file_New(); 

voidMainWindow:

:

on_action_Save_triggered() 

do_file_Save(); 

voidMainWindow:

:

on_action_SaveAs_triggered() 

do_file_SaveAs(); 

最终的mainwindow.cpp文件如下。

 

 

最终的mainwindow.h文件如下。

 

 

这时点击运行,就能够实现新建文件,保存文件,文件另存为的功能了。

然后实现打开,关闭,退出,撤销,复制,剪切,粘贴的功能。

 

先备份上次的工程文件,然后再将其打开。

 

1.先在mainwindow.h文件中加入函数的声明。

 

voiddo_file_Open();//打开文件 

booldo_file_Load(constQString&fileName);//读取文件 

 

  

2.再在mainwindow.cpp文件中写函数的功能实现。

  

voidMainWindow:

:

do_file_Open()//打开文件 

do_file_SaveOrNot();//是否需要保存现有文件 

QStringfileName=QFileDialog:

:

getOpenFileName(this); 

//获得要打开的文件的名字 

if(!

fileName.isEmpty())//如果文件名不为空 

do_file_Load(fileName); 

ui->textEdit->setVisible(true);//文本编辑器可见 

 

boolMainWindow:

:

do_file_Load(constQString&fileName)//读取文件 

QFilefile(fileName); 

if(!

file.open(QFile:

:

ReadOnly|QFile:

:

Text)) 

QMessageBox:

:

warning(this,tr(“读取文件”),tr(“无法读取文件%1:

\n%2.”).arg(fileName).arg(file.errorString())); 

returnfalse;     //如果打开文件失败,弹出对话框,并返回 

QTextStreamin(&file); 

ui->textEdit->setText(in.readAll());     //将文件中的所有内容都写到文本编辑器中 

curFile=QFileInfo(fileName).canonicalFilePath(); 

setWindowTitle(curFile); 

returntrue; 

 

上面的打开文件函数与文件另存为函数相似,读取文件的函数与文件存储函数相似。

 

3.然后按顺序加入更菜单的关联函数,如下。

 

voidMainWindow:

:

on_action_Open_triggered()  //打开操作 

do_file_Open(); 

// 

voidMainWindow:

:

on_action_Close_triggered()//关闭操作 

do_file_SaveOrNot(); 

ui->textEdit->setVisible(false); 

// 

voidMainWindow:

:

on_action_Quit_triggered()//退出操作 

on_action_Close_triggered();    //先执行关闭操作 

qApp->quit();   //再退出系统,qApp是指向应用程序的全局指针 

// 

voidMainWindow:

:

on_action_Undo_triggered()//撤销操作 

ui->textEdit->undo(); 

// 

voidMainWindow:

:

on_action_Cut_triggered()//剪切操作 

ui->textEdit->cut(); 

// 

voidMainWindow:

:

on_action_Copy_triggered()//复制操作 

ui->textEdit->copy(); 

// 

voidMainWindow:

:

on_action_Past_triggered()//粘贴操作 

ui->textEdit->paste(); 

 

因为复制,撤销,全选,粘贴,剪切等功能,是TextEdit默认就有的,所以我们只需调用一下相应函数就行。

 

到这里,除了查找和帮助两个菜单的功能没有加上以外,其他功能都已经实现了。

 

 

分类:

Qt系列教程作者:

yafeilinux日期:

四月30th,2010.   883views

Tags:

creator,qt,yafeilinux,教程

7条评论在“六、QtCreator实现文本编辑”

1.

yafeilinux说:

2010年05月23日于6:

15下午

嗯,好的,谢谢您的建议。

2.

ding404说:

2010年05月22日于12:

16下午

学习完毕,不过有个地方觉得可以改进。

在do_file_SaveOrNo()里头能否在多一个button选项,就是cancel,如果用户误点了像取消的话就很方便了,否则还需要用户重新打开文件才能在textedit中显示出来

3.

Me说:

2010年05月21日于7:

38下午

学习完毕~:

4.

Eric说:

2010年05月20日于4:

50下午

保存好文件之后单击退出还是提示我是否要保存文件

解决办法:

saveFile()倒二行加:

ui.textEdit->document()->setModified(false);//保存以后,改变modified的值

打开文件修改后保存会要求另存:

解决办法:

在do_file_Load()倒二行加:

isSaved=true;

5.

Eric说:

2010年05月18日于4:

56下午

我的eclipse里面没有gotoslot菜单,,怎么办。

难道只能直接到.h文件里面手动输入?

6.

y84161838说:

2010年05月15日于12:

34下午

学习完毕谢谢^_^

7.

yangyang说:

2010年05月2日于11:

43下午

学习完毕谢谢^_^

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2