2012年(46)
分类: C/C++
2012-05-02 13:22:35
摘自: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是这个动作的快捷键。Qt的QKeySequence已经为我们定义了很多内置的快捷键,比如我们使用的Open。你可以通过查阅API文档获得所有的快捷键列表,或者是在QtCreator中输入::后会有系统的自动补全功能显示出来。这个与我们自己定义的有什么区别呢?简单来说,我们完全可以自己定义一个tr("Ctrl+O")来实现快捷键。原因在于,这是Qt跨平台性的体现。比如PC键盘和Mac键盘是不一样的,一些键在PC键盘上有,而Mac键盘上可能并不存在,或者反之,所以,推荐使用QKeySequence类来添加快捷键,这样,它会根据平台的不同来定义不同的快捷键。
fileMenu->addSeparator ();为菜单项添加一个分隔符
编译运行
下面加上工具栏<需添加#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);
菜单栏还可以拖动哦
本节到此结束,下回见!
作者:荒 木
出处:http://rophie.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。