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

全部博文(46)

文章存档

2012年(46)

我的朋友

分类: C/C++

2012-05-02 13:22:35

C++ Qt 06:文本编辑器——菜单栏

摘自:http://www.cnblogs.com/rophie/archive/2012/04/05/2433536.html

 

前面我们学习了Qt的一些基本知识,接下来通过一个文本编辑器的例子来学习Qt Gui应用程序的开发。

 

在正文开始之前,我们先来介绍在Qt如何使用中文。先来了解QObject::tr()这个函数:

QString QObject::tr ( const char * sourceText, const char * disambiguation = 0, int n = -1 ) [static]

 

被这个函数处理的字符串可以使用工具提取出来翻译成其他语言,也就是做国际化使用。关于Qt的国际化以后还会仔细讲解,只要记住,Qt的最佳实践:如果你想让你的程序国际化的话,那么,所有用户可见的字符串都要使用QObject::tr()tr()函数是定义在Object里面的,所有使用了Q_OBJECT宏的类都自动具有tr()函数。

 

本文我们先使用QTextCodec类来将编码名称写到main函数里面,以显示中文。

QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));

 

下面开始正文,新建一个项目,起名叫QNotepad,不要自动创建界面,从本章开始我们都采用代码方式创建界面一来灵活性比较高,二来学习阶段不要怕麻烦,搞懂原理之后再去用Qt设计师来拖控件,有利于学习。

 

/main.cpp

 

 1 #include

 2 #include "mainwindow.h"

 3 #include

 4

 5 int main(int argc, char *argv[])

 6 {

 7     QApplication a(argc, argv);

 8     QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));//设置编码

 9     MainWindow w;

10     w.resize(700,600);//设置窗口的尺寸

11     w.setWindowTitle(QObject::tr("无标题-QNotepad"));//设置窗口标题栏文字

12     w.show();

13     return a.exec();

14 }

 

首先我们来添加一个文件菜单,里面包括新建,打开,保存,另存为,打印,退出,和Windows的记事本差不多,首先在头文件中增加一个私有FileAction方法,不要忘记QAction类的前向声明哦

 

1 class QAction;

2

3 class MainWindow : public QmainWindow

4 {

5 //......

6 private:

7     void FileActions();

8 //......

9 };

 

然后在MainWindow.cpp文件中

 

 1 #include "mainwindow.h"
 2 #include
 3 #include
 4 #include
 5
 6 MainWindow::MainWindow(QWidget *parent)
 7     : QMainWindow(parent)
 8 {
 9     FileActions();
10 }
11
12 MainWindow::~MainWindow()
13 {
14    
15 }
16 void MainWindow::FileActions ()
17 {
18     QMenu *fileMenu=new QMenu(QObject::tr ("
文件(&F)"),this);
19     menuBar()->addMenu(fileMenu);
20     QAction *f;
21     f=new QAction(QObject::tr ("
新建(&N)"),this);
22     f->setShortcut(QKeySequence::New);
23     fileMenu->addAction (f);
24
25     f=new QAction(QObject::tr ("
打开(O)..."),this);
26     f->setShortcut(QKeySequence::Open);
27     fileMenu->addAction (f);
28
29     f=new QAction(QObject::tr ("
保存(&S)"),this);
30     f->setShortcut(QKeySequence::Save);
31     fileMenu->addAction (f);
32
33     f=new QAction(QObject::tr ("
另存为(&A)..."),this);
34     f->setShortcut(QKeySequence::SaveAs);
35     fileMenu->addAction (f);
36
37     fileMenu->addSeparator ();
38
39     f=new QAction(QObject::tr ("
打印(&P)..."),this);
40     f->setShortcut(QKeySequence::Save);
41     fileMenu->addAction (f);
42
43     fileMenu->addSeparator ();
44
45     f=new QAction(QObject::tr ("
退出(&X)"),this);
46     f->setShortcut(QKeySequence::Save);
47     fileMenu->addAction (f);
48 }

 

9行调用FileAction方法。

QMenu*fileMenu=newQMenu(QObject::tr("文件(&F)"),this);

menuBar()->addMenu(fileMenu);

首先创建一个文件菜单,调用menuBar()函数的addMenu将菜单添加到菜单栏中。

 

QAction *f;
f=new QAction(QObject::tr ("
新建(&N)"),this);

创建一个菜单项。第一个参数是这个动作的文本描述,用来显示文本信息,比如在菜单中的文本;第二个parent,指明它的父窗口,一般而言,我们通常传入this指针就可以了。

f->setShortcut(QKeySequence::New);

 

我们使用了setShortcut函数。shortcut是这个动作的快捷键。QtQKeySequence已经为我们定义了很多内置的快捷键,比如我们使用的Open。你可以通过查阅API文档获得所有的快捷键列表,或者是在QtCreator中输入::后会有系统的自动补全功能显示出来。这个与我们自己定义的有什么区别呢?简单来说,我们完全可以自己定义一个tr("Ctrl+O")来实现快捷键。原因在于,这是Qt跨平台性的体现。比如PC键盘和Mac键盘是不一样的,一些键在PC键盘上有,而Mac键盘上可能并不存在,或者反之,所以,推荐使用QKeySequence类来添加快捷键,这样,它会根据平台的不同来定义不同的快捷键。

fileMenu->addSeparator ();为菜单项添加一个分隔符

编译运行

clip_image001

 

下面加上工具栏<需添加#include >

 

 1     QToolBar *fileToolBar=new QToolBar(this);
 2     fileToolBar->setWindowTitle(tr("File Actions"));
 3     //
设置工具栏名称
 4     addToolBar(fileToolBar);
 5
 6     QMenu *fileMenu=new QMenu(QObject::tr ("
文件(&F)"),this);
 7     menuBar()->addMenu(fileMenu);
 8
 9     QAction *f;
10     f=new QAction(QObject::tr ("
新建(&N)"),this);
11     f->setShortcut(QKeySequence::New);
12     fileMenu->addAction (f);
13     //
将菜单项添加到工具栏
14     fileToolBar->addAction (f);

 

clip_image002

菜单栏还可以拖动哦

clip_image003

clip_image004

 

 

本节到此结束,下回见!

 

 

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

 

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