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

全部博文(46)

文章存档

2012年(46)

我的朋友

分类: C/C++

2012-05-03 12:54:13

C++ Qt 07:文本编辑器——工具栏图标和信号槽关联

摘自:http://www.cnblogs.com/rophie/archive/2012/04/06/2434285.html

 

一、工具栏图标

使用图标,先要添加一个资源文件,在项目想右键-添加新文件

clip_image001

我们取名叫ICONS,这时就多了个资源文件ICONS.qrc,它是一个普通的XML文件。首先点击添加前缀/new/prefix1改成/icons,然后在工程文件中添加一个图标,再选择添加文件,选择需要的图标(最好是png)。我们看到导入进来的图标是图标文件所在的路径,使用的时候不太方便,我们可以选中图标将它设置好别名,这样完成之后保存qrc文件即可。

clip_image002

MainWindow.cpp中我们加上一句:

 

1     f=new QAction(QObject::tr ("新建(&N)"),this);
2     f->setShortcut(QKeySequence::New);
3     fileMenu->addAction (f);
4
5     //setIcon
添加图标
6     f->setIcon (QIcon(":/icons/filenew"));
7     //
添加的类是QIcon,构造函数需要一个参数,是一个字符串。由于我们要使用qrc中定义的图片,所以字符串以 : 开始,后面跟着文件的路径,我们设置了别名,所以就是filenew
8
9     fileToolBar->addAction (f);

 

同样的方法将其他的都加上图标,完成后效果如下

clip_image003

 

二、添加事件响应

还记得Qt的事件响应机制是基于信号槽吗?点击QAction会发出triggered()信号,所以,我们要做的是声名一个slot,然后connect这个信号。

头文件中声明一个slots: flienew()

 

 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3
 4 #include
 5 class QAction;
 6
 7 class MainWindow : public QMainWindow
 8 {
 9     Q_OBJECT
10    
11 public:
12     MainWindow(QWidget *parent = 0);
13     ~MainWindow();
14 private:
15     void FileActions();
16 private slots:
17     void fileNew();

18 };
19
20 #endif // MAINWINDOW_H

 

MainWindow.cpp中的新建菜单代码中添加

connect (f,SIGNAL(triggered()),this,SLOT(fileNew()));

然后定义fileNew

1 void MainWindow::fileNew ()
2 {
3     QMessageBox::information (NULL,tr("
新建"),tr("新建了一个文档!"));
4 }

 

完整代码如下

mainwindow.cpp

 

 1 #include "mainwindow.h"
 2 #include
 3 #include
 4 #include
 5 #include
 6 #include
 7
 8 MainWindow::MainWindow(QWidget *parent)
 9     : QMainWindow(parent)
10 {
11     FileActions();
12 }
13
14 MainWindow::~MainWindow()
15 {
16    
17 }
18 void MainWindow::FileActions ()
19 {
20     QToolBar *fileToolBar=new QToolBar(this);
21     fileToolBar->setWindowTitle(tr("File Actions"));
22     addToolBar(fileToolBar);
23
24     QMenu *fileMenu=new QMenu(QObject::tr ("
文件(&F)"),this);
25     menuBar()->addMenu(fileMenu);
26     QAction *f;
27     f=new QAction(QObject::tr ("
新建(&N)"),this);
28     f->setShortcut(QKeySequence::New);
29     fileMenu->addAction (f);
30     f->setIcon (QIcon(":/icons/filenew"));
31     fileToolBar->addAction (f);
32     connect (f,SIGNAL(triggered()),this,SLOT(fileNew()));
33
34     f=new QAction(QObject::tr ("
打开(O)..."),this);
35     f->setShortcut(QKeySequence::Open);
36     fileMenu->addAction (f);
37     f->setIcon (QIcon(":/icons/fileopen"));
38     fileToolBar->addAction (f);
39
40     f=new QAction(QObject::tr ("
保存(&S)"),this);
41     f->setShortcut(QKeySequence::Save);
42     fileMenu->addAction (f);
43     f->setIcon (QIcon(":/icons/filesave"));
44     fileToolBar->addAction (f);
45
46     f=new QAction(QObject::tr ("
另存为(&A)..."),this);
47     f->setShortcut(QKeySequence::SaveAs);
48     fileMenu->addAction (f);
49
50     fileMenu->addSeparator ();
51
52     f=new QAction(QObject::tr ("
打印(&P)..."),this);
53     f->setShortcut(QKeySequence::Save);
54     fileMenu->addAction (f);
55     f->setIcon (QIcon(":/icons/fileprint"));
56     fileToolBar->addAction (f);
57
58     fileMenu->addSeparator ();
59
60     f=new QAction(QObject::tr ("
退出(&X)"),this);
61     f->setShortcut(QKeySequence::Save);
62     fileMenu->addAction (f);
63 }
64 void MainWindow::fileNew ()
65 {
66     QMessageBox::information (NULL,tr("
新建"),tr("新建了一个文档!"));
67 }

 

编译运行,点击菜单-新建或者工具栏的新建按钮图标

clip_image004

 

今天就到这里,呵呵!

 

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

 

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