原文地址:http://devbean.blog.51cto.com/448512/205958
如何进行菜单和工具栏的优化,有以下步骤
一 添加图标
QAction的图标会显示在菜单项的前面以及工具条按钮上面显示。我们需要使用QT的资源文件
(1)
(2)
(3)点击添加 添加前缀 如图所示
将生成的/new/prefix改成/。这是prefix就是以后使用图标时需要提供的前缀,以/开头。添加过prefix之后,然后在工程文件中添加一个图标,再选择Add file,选择那个图标。这样完成之后保存qrc文件即可。
二.代码修改
1.修改mainwindow.cpp的构造函数的代码
openAction = new QAction(tr("&Open"), this);
openAction->setShortcut(QKeySequence::Open);
openAction->setStatusTip(tr("Open a file."));
openAction->setIcon(QIcon(":/PICTURE/panda.ico"));
(1)setIcon用于添加图标,添加的类为QIcon类型;
构造函数需要参数,参数类型是一个字符串。
由于需要使用qrc中定义的图片,所以字符串以:开始,后面加file的路径
点击run,运行结果如下
2.为QAction添加事件响应
QT的事件响应基于信号槽机制。
点击QAction会发出triggered()信号,因而此时需要声名一个slot,然后connect这个信号。
(1)mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
/*前向声名,这是第一句增加的话
*/
class QAction;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void open();
private:
//定义一个QAction类型的指针
QAction *openAction;
};
#endif // MAINWINDOW_H
(2)mainwindow.cpp
#include <QMenu>
#include<QMenuBar>
#include<QAction>
#include<QKeySequence>
#include<QToolBar>
#include<QMessageBox>
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//定义openAction,设置快捷键
openAction = new QAction(tr("&Open"), this);
openAction->setShortcut(QKeySequence::Open);
openAction->setStatusTip(tr("Open a file."));
openAction->setIcon(QIcon(":/PICTURE/panda.ico"));
connect(openAction,SIGNAL(triggered()),this,SLOT(open()));
//往menuBar中添加menu
QMenu *file = menuBar()->addMenu(tr("&File"));
file->addAction(openAction);
//添加工具栏
QToolBar *toolBar = addToolBar(tr("&File"));
toolBar->addAction(openAction);
}
MainWindow::~MainWindow()
{
}
void MainWindow::open(){
QMessageBox::information(NULL,tr("open"),tr("open a file"));
}
运行结果如下:
三 图片知识
1.图片路径
Qt的资源文件视图使用树状结构,根是/,叶子节点就是图片位置,连接在一起就是路径。比如这张图片的路径为/PICTURE/panda.ico
2.图片大小
QToolBar的图标大小默认是32*32,菜单默认是16*16。如果提供的图标小于要求的尺寸,则不做操作,Qt不会为你放大图片;反之,如果提供的图标文件大于相应的尺寸要求,比如是64*64,Qt会自动缩小尺寸