今天用MainWindow类创建一个简单的文本,实现简单的新建、打开、另存为、保存,及字体大小颜色的改变。
一首先创建一个MainWindow类
这里不要用到Generate form.
现在我们要在上述MainWindow中添加文本编辑框、File菜单,里面包含新建、打开、另存为、保存,以及在工具栏里添加新建、打开、保存快捷图标。
首先先实现文本编辑框
为了方便我们把头文件的#include<QtGui/QMainWindow> 改成#include<QtGui >
在上述MainWindow类里声明
QPlainTextEdit textEdit;
在构造函数里写入
this->setCentralWidget(textEdit);
接下来实现File菜单和添加工具栏
首先先填加图标
后面一直按下去。创建后填加
先把F:QT4.7.3examplesmainwindowsappl
先选择mainwindow.grc
下面就是实现菜单file简单功能的图标显示 的代码
在mainwindow.h的MainWindow类里声明:
QAction *newAction;//新建
QAction*openAction;//打开
QAction*saveAction;//保存
QAction*saveAsAction;//另存为
QAction*closeAction;//关闭
QMenu*fileMenu;
QToolBar*fileToolBar;//fileToolBar工具栏
在mainwindow.cpp的mainWindow的构造函数里写如下代码:
**************************************************
API里的函数原形 QAction ( const QIcon & icon,const QString & text, QObject * parent)
newAction = newQAction(QIcon(":/images/new.png"),"&New",this);
openAction = newQAction(QIcon(":/images/open.png"),"&Open",this);
saveAction = newQAction(QIcon(":/images/save.png"),"&Save",this);
saveAsAction = new QAction("Save&As",this);
closeAction = newQAction("close",this);
************************************************
*********************************************
在菜单栏里添加File菜单
File菜单里添加打开、新建、保存、另存为、关闭等行为选项
fileMenu =this->menuBar()->addMenu("&File");
fileMenu->addAction(newAction);
fileMenu->addAction(openAction);
fileMenu->addAction(saveAction);
fileMenu->addAction(saveAsAction);
fileMenu->addAction(closeAction);
*************************************************
*********************************************
在工具栏里添加打开、新建、保存等图标 行为选项
fileToolBar =this->addToolBar("File");
fileToolBar->addAction(newAction);
fileToolBar->addAction(openAction);
fileToolBar->addAction(saveAction);
****************************************************
运行结果
上面只是显示图标、选项,还没有实际功能,接下来实现这些功能。
在mainwindow.h的MainWindow类里声明:
在mainwindow.cpp 的MainWindow的构造函数里添加如下代码:
*****************************************************************
在菜单File里或工具栏里单击新建、打开、保存、另存为、关闭等信号产生对应的槽的实现
QObject::connect(newAction,SIGNAL(triggered()),this,SLOT(slotNew()));
*****************************************************************
在mainwindow,cpp里实现mainwindow.h方法、槽,代码如下
****************************************************************
函数作用:判断文件是否保存了
textEdit.document()->isModified()是判断文本编辑的内容是否被修改
如果被修改就跳出一个警告对话框,问是否保存、忽略、取消。
QMessageBox::warning()是警告对话框实现,里面参数依次是parent即MainWindow类,对话框标题,文本内容,三个按钮选择:save/discard/cancle
如果选择保存,执行保存方法;
如果选择取消,返回false;
如果没被修改,返回true
*****************************************************************
bool MainWindow::maybeSave()
{
"the document has been modified,Do you want to save yourchange",
}
***********************************************************
函数作用:设置当前文本名
如果文本名是空,就设为Untitle.txt,
如果不为空,就把当前文本名设为fileName
textEdit.document()->setModified(false);
this->setWindowModified(false);
这两句是使文本编辑 和窗口处于没被修改的状态
*********************************************************
void MainWindow::setCurrentFile(const QString&fileName)
{
}
*********************************************************
函数作用:新建文件点击后实现的方法(槽)
当点击新建,如果当前以有打开的文本,先判断文本是否被修改,如果没被修改,直接把文本编辑的内容清掉,并把新建的文本名设为Untitle.txt。
有被修改,就执行maybeSave()里的 return slotSave();进行保存
void MainWindow::slotNew()
{
}
****************************************
函数作用:点击保存所实现的方法(槽)
如果当前文本名为空,就执行另存为方法
如果不为空,就执行保存文本的方法
*************************************
bool MainWindow::slotSave()
{
}
*******************************************
函数作用:把文本编辑的内容保存到文本里面
先新建文本,打开文本,如果打开失败会跳出一个错误对话框,显示不能写
如果打开成功,新建一个文本流out,把文本编辑的内容都输出到文本流,并设置当前的文本名为保存时写的文本名。
**********************************************
boolMainWindow::saveFile(const QString &fileName)
{
}
***********************************
函数作用:点击另存为选项实现的方法
点击另存为跳出文件对话框,输入另存为名字并把改名字赋值给fileName
如果没输入另存为名字取消掉,返回false
如果输入,用这个名字保存文本
**************************************
bool MainWindow::slotSaveAs()
{
}
***************************************
函数作用:点击打开选项实现的方法(槽)
点击打开文本,先判断当前已经打开的文本是否保存
如果保存了,就跳出文件对话框,输入要打开的文件名,并把该文件名赋值给fileName,fileName不为空,打开该文件
********************************************
voidMainWindow::slotOpen()
{
}
**********************************************
函数作用:打开fileName这个文件
先打开fileName文本,如果打开失败,跳出一个错误对话框,并返回
如果打开成功,把该文本的内容都读到文本编辑上,并设置当前文本的文件名为fileName.
****************************************************************
void MainWindow::loadFile(constQString &fileName)
{
}