Chinaunix首页 | 论坛 | 博客
  • 博客访问: 126179
  • 博文数量: 46
  • 博客积分: 571
  • 博客等级: 准尉
  • 技术积分: 290
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-26 23:57
文章分类

全部博文(46)

文章存档

2012年(46)

我的朋友

分类: C/C++

2012-05-04 14:12:38

C++ Qt 08:文本编辑器——新建菜单功能实现

摘自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 )

什么是中央窗口部件,我们前面说过,看下面这图:

clip_image001

最后setFocus设置textEdit活得输入焦点。这时我们的程序看起来很像一个记事本了

clip_image002

 

下面来实现菜单的功能吧。

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类型的变量retQMessageBox::warning的返回值,如果用户点击了保存按钮,则返回执行fileSave()函数的结果(即是否返回成功)。如果用户点击了取消按钮,则返回false,即什么都不做。我们先设置fileSave()函数返回为true

bool MainWindow::fileSave()
{
    return true;
}

运行一下,基本上的功能实现了

clip_image003

 

 

 

 

 

作者
出处http://rophie.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利

 

阅读(1207) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~