QT编程实例1--简单的文本编辑器(上)
本文将使用已学习的QT编程的知识,结合创建主窗口的方法和流程编写一款简单实用的文字编辑器,完成后的效果图如上。首先我们先分析写这样一个程序的大体思路,用到哪些知识点,程序的主要框架;然后是各个部分的实现;最后做个总结。写这样的程序可以使用QtCreat,当然也可以直接敲代码,这里我选择采用后者。
【思路】Qt的QMainWindow类提供了一个应用程序主窗口,包括菜单栏、多个工具栏、状态栏、中心部件等。那么我们做这样一个文字编辑器的程序,可以基于这样一个类来实现。虽然这并不是一个特别复杂的程序,代码量在500行内,但是对初学的咱们来说,还是有些小难度的。因此,我们可以先实现一些最简单的功能,然后在逐渐丰满我们的整个程序。在程序的调试过程中也可以参照上面的思路,先确保一小部分或基本的功能没有问题,然后再慢慢扩大范围,直至找到问题的所在并逐个解决。
【框架及实现】工程将主要有三个文件组成:mainwindow.h头文件、mainwindow.cpp实现文件和application.qrc资源文件组成。当然作为一个工程,还有一些其他文件如mainwindow.pro、Makefile及一些中间生成的文件。我们大量的工作量是耗费在mainwindow.h和mainwindow.cpp这两个文件的编写上的。那么在两个文件中要安排写哪些东西了?首先看mainwindow.h这个文件。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
//#include <QtGui/QApplication>
//#include <QMainWindow>
#include <QtGui>
/*
QT_BEGIN_NAMESPACE
class QAction;
class QMenu;
class QPlainTextEdit;
QT_END_NAMESPACE
*/
class MainWindow:public QMainWindow
{
Q_OBJECT
public:
MainWindow();
protected:
void closeEvent(QCloseEvent *event);
private slots:
void newFile();
void open();
bool save();
bool saveAs();
void about();
void documentWasModified();
private:
void createActions();
void createMenus();
void createToolBars();
void createStatusBars();
void readSettings();
void writeSettings();
bool maybeSave();
void loadFile(QString fileName);
bool saveFile(const QString &fileName);
void setCurrentFile(const QString &fileName);
QString strippedName(const QString &fullFileName);
QTextEdit *textEdit;
//QPlainTextEdit *textEdit;
QString curFile;
QMenu *fileMenu;
QMenu *editMenu;
QMenu *helpMenu;
QToolBar *fileToolBar;
QToolBar *editToolBar;
QAction *newAct;
QAction *openAct;
QAction *saveAct;
QAction *saveAsAct;
QAction *exitAct;
QAction *cutAct;
QAction *copyAct;
QAction *pasteAct;
QAction *aboutAct;
};
#endif // MAINWINDOW_H
/****************************************************************************************************
补充知识--基本概念
class MainWindow:public QMainWindow{ }这句声明了定义的MainWindow类继承派生了Qt自带的类QMainWindow,下面是这个类声明的主体。在派生出来的类中我们新增加了我们所需要的元素,如一个公共函数、一个保护函数、几个私有的槽函数、私有函数及一些变量。void closeEvent(QCloseEvent *event)函数为一个虚函数,在QMainWindow类里面已经有定义,但是这里把它重写了。该函数是在关闭窗口时做一些其他的事情。
By:霜月孤鸟
2015.1.13