2012年(46)
分类: C/C++
2012-05-04 14:12:38
摘自:http://www.cnblogs.com/rophie/archive/2012/04/09/2435198.html
前面我们已经创建好了文件菜单,但是点击后没有什么功能,本节就让我们一起完成每个菜单的功能吧。
既然叫文本编辑器,怎么连输入文本的地方都没有呢,好吧,我们需要在头文件中声明一个QTextEdit
private:
QTextEdit *textEdit;
在MainWindow的构造函数中
1 textEdit=new QTextEdit(this);
2 setCentralWidget(textEdit);
3 textEdit->setFocus();
首先创建一个textEdit,然后设置这个窗口的中央窗口部件为textEdit,其原型如下
void QMainWindow::setCentralWidget ( QWidget * w )
什么是中央窗口部件,我们前面说过,看下面这图:
最后setFocus设置textEdit活得输入焦点。这时我们的程序看起来很像一个记事本了
下面来实现菜单的功能吧。
1.退出菜单
很简单,一句代码
connect (f,SIGNAL(triggered()),this,SLOT(close()));
2.新建菜单
一般的文档处理的程序中,在我们点击新建菜单的时候,如果我们的文档已经被修改但没有保存,会提示你是否进行保存操作,所以在点击新建的时候首先要判断文档是否需要保存,如果需要保存,则执行保存操作,如果不需要,则清空textEdit的内容,并设置文档的名称为无标题。所以现在头文件中声明一个返回值为bool的方法maybeSave()和fileNew以及fileSave的槽函数。
private:
bool maybeSave();
private slots:
void fileNew();
bool fileSave();
我们来实现fileNew函数
void MainWindow::fileNew ()
{
if (maybeSave()) {
textEdit->clear();
setWindowTitle (QObject::tr("无标题-QNotepad"));
}
}
如果 maybeSave 返回true,则清空textEdit的内容,并设置文档的名称为无标题 。那么怎么来判断文件是否已经被修改呢,我们来实现maybeSave函数:
1 bool MainWindow::maybeSave ()
2 {
3 if (!textEdit->document()->isModified())
4 return true;
5 QMessageBox::StandardButton ret;
6 ret=QMessageBox::warning(this, QObject::tr("QNotepad"),QObject::tr("文件已经被修改\n是否保存文件?"),QMessageBox::Save | QMessageBox::Discard| QMessageBox::Cancel);
7 if(QMessageBox::Save==ret)
8 return fileSave();
9 else if (ret == QMessageBox::Cancel)
10 return false;
11 return true;
12 }
首先我们用isModified ()来判断文档是否已被修改,返回bool值,默认为false,如果为true被修改则返回true,执行fileNew的新建动作,否则就弹出一个警告对话框询问,QMessageBox的警告消息框如下
StandardButton QMessageBox::warning ( QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton ) [static]
第一个参数是指它的父窗口,第二个是消息框的标题,第三个是消息框的内容,这个消息框最多有三个按钮,可用 “|” 符号连接,默认消息框的按钮是StandardButtons枚举类型的ok按钮,剩下的两个都是NoButton。
StandardButtons的内容具体可查看api文档,本文中我们使用了QMessageBox::Save | QMessageBox::Discard| QMessageBox::Cancel三个按钮。
定义一个StandardButtons类型的变量ret为QMessageBox::warning的返回值,如果用户点击了保存按钮,则返回执行fileSave()函数的结果(即是否返回成功)。如果用户点击了取消按钮,则返回false,即什么都不做。我们先设置fileSave()函数返回为true
bool MainWindow::fileSave()
{
return true;
}
运行一下,基本上的功能实现了
作者:荒 木
出处:http://rophie.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利