怎样用QT 的qtextbrower 输出一个文本文件里的内容。

 我来答
爱笑的柯南推理
2018-10-24 · TA获得超过6191个赞
知道大有可为答主
回答量:6693
采纳率:65%
帮助的人:1139万
展开全部
实验过程:

下面讲的主要是一个个简单功能的逐步实现过程的某些细节。

界面的设计:

在action编辑器中,Text栏中输入文字内容,如果有快捷方式,也最好用括号将其注释起来 ;Object Name中输入目标名字,最好采用默认的action开头命名;Tooltip是当鼠标靠近该菜单一会儿的时候会提示的文字,这里一般与Text栏中除括号注释外的相同;ShotCut一栏中直接用键盘按下快捷键一遍即可,注意按下Ctrl+Tab时显示的为Ctrl+Tab,当按下Ctrl+Shift+Tab时显示的是Ctrl+Shift+Backtab.;

菜单涉及完成后 如下图所示:

上面的used一栏不可用,当按住action编辑器中的每一栏,拖动到对应菜栏下的typehere了就变成打勾可用了。

MyMdi文档类的建立:

新建一个类,名字取为MyMdi,基类名为QTextEdit(注意,因为下拉列框中可选的基类有限,所以这里可以自己输入),类型信息选择继承来自QWidget。

因为我们在建立工程的时候,其主界面就是用的MainWindow这个类,这个类主要负责主界面的一些界面的布局(比如菜单栏,工具栏,状态栏等),显示,退出和一些人机交互等。那么我们新建的MyMdi这个类就不需要负责它在它的父窗口中的显示退出等,只需负责自己窗口的布局和界面显示等。这种思想是说每个界面都单独分离开来,只负责自己界面的实现和与它的子界面交互。

好像window和widget不同,window为窗口,包括菜单栏,工具栏,状态栏等,而widget一般不包括这些,只包括其文本栏。

打开文件功能的实现:

1. 单击工具栏上的打开文件,则会弹出相应的对话框,选中所需要打开的文本文件。

2. 如果该文件已经被打开过,则设置显示该文件对应的窗口为活动窗口。

3. 如果该文件没有被打开过,则新建一个窗口,该窗口贴在其父窗口中。且此时把文件打开,打开成功则状态栏对应显示成功信息,否则输出错误信息。

4. 过程3中打开文件是以只读和文本方式打开文件的,打开完后将文本内容显示到窗口,并设置好文件窗口的标题信息等。

5. 如果文本内容变化后但没有保存,则窗口的标题有*号在后面。

新建文件功能的实现:

1. 单击工具栏上的新建文件,则新建立一个窗口对象,其类为MyMdi,本身具备输入文字的功能,因为是继承的QTextEdit。

2. 设置好标题栏等信息,且当有文字内容改变又没有保存的情况下则后面也一样显示*号。

保存文件功能的实现:

1. 如果是新建的文件,单击保存时会自动跳到另存为那边,即弹出一个另存为对话框,重新选择保存文件的目录和文件名。

2. 如果是已经保存过的文件,比如说打开的文件,单击菜单栏下的保存时,其内部执行的是用文件流将打开的文件写入到指定的文件名中。

关闭窗口功能的实现:

当单击窗口右上角的关闭按钮时,程序会自动执行该窗口的closeEvent()函数,所以如果我们在关闭窗口时需要某些功能,可以重写这个函数。

复制粘贴剪切撤销等功能实现:

因为MyMdi这个类是继承QTextEdit类的,所以这些方法都可以直接调用QTextEdit类里面对应的方法就可以了。

更新菜单栏和工具栏功能的实现:

菜单栏中并不是所有的操作都是可用的,比如说复制,如果没有活动窗口,或者即使有活动窗口但是没有选中文本,则该操作不可以,同理,剪切也是一样。

另外,撤销和恢复都是要经过系统判断,当前是否可用执行这些操作,如果可以则这些操作对应的图标为亮色,可用,否则为灰色不可用。

状态栏的操作也是一样,当有光标移动时,状态栏显示的行列号值才会跟着变化。

更新窗口子菜单栏功能实现:

当打开多个文档时,窗口子菜单下面会自动列出这些文档的名字,且作为一个组单独用分隔符与上面的子菜单隔开。我们可以在该菜单栏下选择一个文档,选完后该文档会被自动当做活动文档,且处于选中状态。前9个文档可以用1~9这些数字做为快捷键。

保存窗口设置功能实现:

如果软件需要实现这一功能:当下次打开时和上次该软件关闭时的窗口大小,位置一样。那么我们就必须在每次关闭软件时,保留好窗口大小,尺寸等信息,当下次打开该软件时,重新读取这些信息并对窗口进行相应的设置。这里需要用到QSettings这个类,该类是永久保存于平台无关的应用程序的一些设置的类。在本程序中,关闭软件时写入窗口信息,打开软件在构造函数中读取该信息并设置相应的窗口。

自定义右键菜单栏功能实现:

默认的右键菜单栏为英文的,我们这里需要把它弄成中文的,只需在MyMdi这个类中重写函数contextMenuEvent(QContextMenuEvent *event)即可。在该函数中,只需新建一个菜单,然后动态为这个菜单加入action,并且为每个action设置快捷键,同时也需要根据情况实现对应action是否可用。

初始化窗口的实现:

这一部分包括设置窗口标题,设置工具栏标题,设置水平垂直滚动条,在状态栏上加一个label,状态栏上显示菜单栏上各种action的提示信息,虽然这个初始化窗口是在构造函数中调用的,但是这些设置在整个应用程序中都有效。

实验结果:

本实验的功能在上面几个过程中已有实现,类似于windows下的记事本一样。下面是其效果一张简单的截图:

实验主要部分代码即注释(附录有工程code下载链接):

mymdi.h:

复制代码
#ifndef MYMDI_H
#define MYMDI_H

#include <QTextEdit>

class MyMdi : public QTextEdit
{
Q_OBJECT
public:
explicit MyMdi(QWidget *parent = 0);
void NewFile();
bool LoadFile(const QString &file_name);
QString CurrentFilePath();
QString get_current_file_name();
void SetCurrentFile(const QString &file_name);
bool Save();
bool SaveAs();
bool SaveFile(const QString &file_name);//因为Save()和SaveAs()有很多共同的代码,所以最好单独写个函数供其调用。

signals:

public slots:

private:
QString current_file_path_;//当前文件的文件名
bool is_saved_; //文件是否保存标志
bool has_saved();
void contextMenuEvent(QContextMenuEvent *event);

protected:
void closeEvent(QCloseEvent *);//重写关闭事件

private slots:
void DocumentWasModified();//当文档内容被改后所需执行的操作

};

#endif // MYMDI_H
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式