2012年(46)
分类: C/C++
2012-05-03 12:54:13
摘自:http://www.cnblogs.com/rophie/archive/2012/04/06/2434285.html
一、工具栏图标
使用图标,先要添加一个资源文件,在项目想右键-添加新文件
我们取名叫ICONS,这时就多了个资源文件ICONS.qrc,它是一个普通的XML文件。首先点击添加前缀,将/new/prefix1改成/icons,然后在工程文件中添加一个图标,再选择添加文件,选择需要的图标(最好是png的)。我们看到导入进来的图标是图标文件所在的路径,使用的时候不太方便,我们可以选中图标将它设置好别名,这样完成之后保存qrc文件即可。
在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);
同样的方法将其他的都加上图标,完成后效果如下
二、添加事件响应
还记得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 ("
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 }
编译运行,点击菜单-新建或者工具栏的新建按钮图标
今天就到这里,呵呵!
作者:荒 木
出处:http://rophie.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。