前面已经将界面做好了,这里我们为其添加代码,实现文本编辑的功能。
首先实现新建文件,文件保存,和文件另存为的功能。
(我们先将上次的工程文件夹进行备份,然后再对其进行修改。在写较大的程序时,经常对源文件进行备份,是个很好的习惯。)
在开始正式写程序之前,我们先要考虑一下整个流程。因为我们要写记事本一样的软件,所以最好先打开windows中的记事本,进行一些简单的操作,然后考虑怎样去实现这些功能。再者,再强大的软件,它的功能也是一个一个加上去的,不要设想一下子写出所有的功能。我们这里先实现新建文件,保存文件,和文件另存为三个功能,是因为它们联系很紧,而且这三个功能总的代码量也不是很大。
因为三个功能之间的关系并不复杂,所以我们这里便不再画流程图,而只是简单描述一下。
新建文件,那么如果有正在编辑的文件,是否需要保存呢?
如果需要进行保存,那这个文件以前保存过吗?如果没有保存过,就应该先将其另存为。
下面开始按这些关系写程序。
1.打开Qt Creator,在File菜单中选择Open,然后在工程文件夹中打开MainWindow.pro工程文件。
先在main.cpp文件中加入以下语句,让程序中可以使用中文。
在其中加入#include <QTextCodec> 头文件包含,再在主函数中加入下面一行:
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
这样在程序中使用中文,便能在运行时显示出来了。
2.在mainwindow.h文件中的private下加入以下语句。
bool isSaved; //为true时标志文件已经保存,为false时标志文件尚未保存
QString curFile; //保存当前文件的文件名
void do_file_New(); //新建文件
void do_file_SaveOrNot(); //修改过的文件是否保存
void do_file_Save(); //保存文件
void do_file_SaveAs(); //文件另存为
bool saveFile(const QString& fileName); //存储文件
这些是变量和函数的声明。其中isSaved变量起到标志的作用,用它来标志文件是否被保存过。然后我们再在相应的源文件里进行这些函数的定义。
3.在mainwindow.cpp中先加入头文件#include <QtGui>,然后在构造函数里添加以下几行代码。
isSaved = false; //初始化文件为未保存过状态
curFile = tr("未命名.txt"); //初始化文件名为“未命名.txt”
setWindowTitle(curFile); //初始化主窗口的标题
这是对主窗口进行初始化。
4.然后添加“新建”操作的函数定义。
void MainWindow::do_file_New() //实现新建文件的功能
{
do_file_SaveOrNot();
isSaved = false;
curFile = tr("未命名.txt");
setWindowTitle(curFile);
ui->textEdit->clear(); //清空文本编辑器
ui->textEdit->setVisible(true); //文本编辑器可见
}
新建文件,先要判断正在编辑的文件是否需要保存。然后将新建的文件标志为未保存过状态。
5.再添加do_file_SaveOrNot函数的定义。
void MainWindow::do_file_SaveOrNot() //弹出是否保存文件对话框
{
if(ui->textEdit->document()->isModified()) //如果文件被更改过,弹出保存对话框
{
QMessageBox box;
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.再添加“保存”操作的函数定义。
void MainWindow::do_file_Save() //保存文件
{
if(isSaved){ //如果文件已经被保存过,直接保存文件
saveFile(curFile);
}
else{
do_file_SaveAs(); //如果文件是第一次保存,那么调用另存为
}
}
对文件进行保存时,先判断其是否已经被保存过,如果没有被保存过,就要先对其进行另存为操作。
7.下面是“另存为”操作的函数定义。
void MainWindow::do_file_SaveAs() //文件另存为
{
QString fileName = QFileDialog::getSaveFileName(this,tr("另存为"),curFile);
//获得文件名
if(!fileName.isEmpty()) //如果文件名不为空,则保存文件内容
{
saveFile(fileName);
}
}
这里弹出一个文件对话框,显示文件另存为的路径。
8.下面是实际文件存储操作的函数定义。
bool MainWindow::saveFile(const QString& fileName)
//保存文件内容,因为可能保存失败,所以具有返回值,来表明是否保存成功
{
QFile file(fileName);
if(!file.open(QFile::WriteOnly | QFile::Text))
//以只写方式打开文件,如果打开失败则弹出提示框并返回
{
QMessageBox::warning(this,tr("保存文件"),
tr("无法保存文件 %1:\n %2").arg(fileName)
.arg(file.errorString()));
return false;
}
//%1,%2表示后面的两个arg参数的值
QTextStream out(&file); //新建流对象,指向选定的文件
out << ui->textEdit->toPlainText(); //将文本编辑器里的内容以纯文本的形式输出到流对象中
isSaved = true;
curFile = QFileInfo(fileName).canonicalFilePath(); //获得文件的标准路径
setWindowTitle(curFile); //将窗口名称改为现在窗口的路径
return true;
}
这个函数实现将文本文件进行存储。下面我们对其中的一些代码进行讲解。
QFile file(fileName);一句,定义了一个QFile类的对象file,其中filename表明这个文件就是我们保存的的文件。然后我们就可以用file代替这个文件,来进行一些操作。Qt中文件的操作和C,C++很相似。对于QFile类对象怎么使用,我们可以查看帮助。
点击Qt Creator最左侧的Help,在其中输入QFile,在搜索到的列表中选择QFile即可。这时在右侧会显示出QFile类中所有相关信息以及他们的用法和说明。
再往下便能看到用QTextStream类对象,进行字符串输入的例子。下面也提到了QFileInfo和QDir等相关的类,我们可以点击它们去看一下具体的使用说明。
上面只是做了一个简单的说明。以后我们对自己不明白的类都可以去帮助里进行查找,这也许是我们以后要做的最多的一件事了。对于其中的英文解释,我们最好想办法弄明白它的大意,其实网上也有一些中文的翻译,但最好还是从一开始就尝试着看英文原版的帮助,这样以后才不会对中文翻译产生依赖。
我们这次只是很简单的说明了一下怎样使用帮助文件,这不表明它不重要,而是因为这里不可能将每个类的帮助都解释一遍,没有那么多时间,也没有那么大的篇幅。而更重要的是因为,我们这个教程只是引你入门,所以很多东西需要自己去尝试。
在以后的教程里,如果不是特殊情况,就不会再对其中的类进行详细解释,文章中的重点是对整个程序的描述,其中不明白的类,自己查看帮助。
9.双击mainwindow.ui文件,在图形界面窗口下面的Action Editor动作编辑器里,我们右击“新建”菜单一条,选择Go to slot,然后选择triggered(),进入其触发事件槽函数。
同理,进入其他两个菜单的槽函数,将相应的操作的函数写入槽函数中。如下。
void MainWindow::on_action_New_triggered() //信号和槽的关联
{
do_file_New();
}
void MainWindow::on_action_Save_triggered()
{
do_file_Save();
}
void MainWindow::on_action_SaveAs_triggered()
{
do_file_SaveAs();
}
这时点击运行,就能够实现新建文件,保存文件,文件另存为的功能了。
然后实现打开,关闭,退出,撤销,复制,剪切,粘贴的功能。
相关推荐
【Qt Creator实现文本编辑】是关于使用Qt Creator开发一个具有基本文本编辑功能的应用程序的教程。这个过程包括了新建文件、文件保存以及文件另存为等核心功能的实现。 首先,为了支持中文显示,我们需要在`main....
6. **编辑配置文件**:用文本编辑器打开`qtcreator.conf`,找到`[General]`部分,添加或修改以下行: ``` StyleSheets=路径/到/你的/样式表.css ``` 这里的路径应替换为你样式表文件的实际路径。 7. **应用主题...
Qt Creator编辑器界面配色方案(GYH VSCode)
#### 六、Qt Creator 实现文本编辑 - **文本编辑器组件**:使用 QTextEdit 或 QPlainTextEdit 控件实现基本的文本编辑功能。 - **高级功能**:实现诸如查找替换、拼写检查等高级功能。 - **语法高亮**:为特定语言...
在Qt Creator中实现语言切换是一项常见的功能,尤其对于面向国际化的软件来说,提供多语言支持是必不可少的。Qt Creator作为一款强大的跨平台开发环境,它自身就具备了切换语言的能力。下面我们将详细探讨如何实现这...
这个压缩包中包含的是一个使用QT库实现的文本编辑器的完整源代码。这个编辑器具备了常见的文本编辑功能,如剪切、复制、粘贴,文本的对齐方式调整,字体与字号的选择,颜色设定,行间距的修改,以及插入图片和创建...
3. **翻译文件QM**: “qtcreator_zh_CN.qm”是一个Qt的翻译消息文件,使用Qt Linguist工具生成,用于存储翻译过的文本。QM文件是经过压缩的二进制格式,能高效地加载和使用,是Qt应用实现多语言支持的关键。 4. **...
压缩包内的“QTCreator vscode风格主题”文件可能是包含配置信息的JSON文件,或者是安装或导入此主题所需的脚本。用户需要按照指示将这个文件导入到QT Creator中,以便应用新主题。具体步骤可能包括打开QT Creator的...
- 文本编辑和查找的实现:了解如何在Qt Creator中实现文本编辑功能,并添加查找和替换文本的功能。 - 状态栏显示的实现:展示如何在程序中添加状态栏,显示程序运行状态信息。 四、Qt Creator事件处理 - 鼠标和键盘...
在本文中,我们将深入探讨如何在Qt Creator中创建自定义插件,特别是在实践中实现一个能够添加到工具栏的按钮。Qt Creator是一款强大的跨平台集成开发环境(IDE),它支持C++和Qt框架的开发。通过编写插件,我们可以...
"QtCreator 配色方案 VS2010风格"是一个专门为Qt Creator设计的配色主题,旨在模拟微软Visual Studio 2010的经典界面风格,为Qt Creator带来一种熟悉且舒适的编程体验。 首先,我们来了解一下Qt Creator的基本功能...
一、Qt Creator 的安装和hello world 程序的编写(原创) 1.首先到Qt 的官方网站上下载Qt Creator,这里我们下载windows 版的。 下载地址:http://qt.nokia.com/downloads 如下图我们下载:Download Qt SDK for ...
使用时去掉.bin,然后将文件拷贝到Qt安装包路径下,如:“D:\soft\Qt5.9.9\Tools\QtCreator\share\qtcreator\styles”
Qt提供了一种资源系统,用于将图片、音频、文本等非代码资源打包进可执行文件。源码中可能会有.qrc文件,展示了如何添加和使用资源。 **7. 调试技巧** Qt Creator内置了强大的调试工具,源码中可能包含断点、变量...
- **键盘流编辑者**:如果您是一个严格的键盘流,更倾向于使用纯文本编辑器而不是带有图形界面的 IDE。 - **CDT 粉丝**:如果您已经习惯了使用 Eclipse 的 CDT 插件,可能会觉得 Qt Creator 不够熟悉。 - **不喜欢 ...
- **文本编辑和查找功能**:探索如何在QtCreator中实现文本编辑器的基本功能,如插入、删除、查找替换等。 - **状态栏显示**:讨论如何在应用程序中添加动态状态栏,显示实时信息或反馈。 - **鼠标键盘事件处理**...
### Qt开发案例:基于Qt Creator的简易文本编辑器 #### 一、引言 Qt是一个跨平台的C++图形用户界面应用程序开发框架,被广泛应用于桌面应用程序、嵌入式系统和移动应用的开发中。Qt Creator是Qt的官方集成开发环境...