目录
1 MDI简介
传统的应用程序设计中有多文档界面(Multi-documentInterface,MDI)应用程序,Qt为设计
MDI应用程序提供了支持。
本节的实例samp6_4是一个MDI应用程序,程序运行效果如图6-14所示。MDI应用程序就
是在主窗口里创建多个同类型的MDI子窗口,这些MDI子窗口在主窗口里显示,并共享主窗口
上的工具栏和菜单等操作功能,主窗口上的操作都针对当前活动的MDI子窗口进行。
设计MDI应用程序需要在主窗口工作区放置一个QMdiArea作为子窗体的容器。实例samp6_4
主窗口的工作区使用一个QMdiArea组件,实例的子窗口类是QFormDoc,是一个使用QPlainTextEdit进行简单文本显示和编辑的窗体。
图6-14 MDI应用程序实例samp6_4的运行时界面
创建的QFormDoc窗体对象作为一个子窗口加入到mdiArea组件中。QMdiArea组件类似于 实例 samp6_3 中主窗口上的 tabWidget 组件,只是 QMdiArea 提供更加完备的功能。更改 MDI 的 显示模式,可以得到与实例 samp6_3 相似的以多页组件管理的 MDI 界面效果。
2 文档窗口类QFormDoc的设计
以可视化方式创建一个基于QWidget的类QFormDoc,设计可视化界面时,只放置一个 QPlainTextEdit组件,并以水平布局填充满整个窗口。这里不再用可视化的方式设计Action,因为 QFormDoc窗口不需要创建自己的工具栏,而是使用主窗口上的工具栏按钮对QFormDoc窗体上
的QPlainTextEdit组件进行操作。
为QFormDoc添加一些用于文件打开和编辑操作的接口函数,QFormDoc类的完整定义如下:
class QFormDoc : public QWidget
{
Q_OBJECT
private:
QString mCurrentFile; //当前文件
bool mFileOpened=false; //文件已打开
public:
explicit QFormDoc(QWidget *parent = 0);
~QFormDoc();
void loadFromFile(QString& aFileName); //打开文件
QString currentFileName();//返回当前文件名
bool isFileOpened();//文件已经打开
void setEditFont();//设置字体
void textCut(); //cut
void textCopy(); //copy
void textPaste(); //paste
private:
Ui::QFormDoc *ui;
};
这些接口函数是为了在主窗口里调用,实现对MDI子窗口的操作。实现代码如下: