qt 工具栏和菜单栏

在前面的QMainWindow的基础之上,我们开始着手建造我们的应用程序。虽然现在已经有一个框架,但是,确切地说我们还一行代码没有写呢!下面的工作就不那么简单了!在这一节里面,我们要为我们的框架添加菜单和工具条。

就像Swing里面的Action一样,Qt里面也有一个类似的类,叫做QAction。顾名思义,QAction类保存有关于这个动作,也就是action的信息,比如它的文本描述、图标、快捷键、回调函数(也就是信号槽),等等。神奇的是,QAction能够根据添加的位置来改变自己的样子——如果添加到菜单中,就会显示成一个菜单项;如果添加到工具条,就会显示成一个按钮。这也是为什么要把菜单和按钮放在一节里面。下面开始学习!

首先,我想添加一个打开命令。那么,就在头文件里面添加一个私有的QAction变量:

class QAction; 
//... 
private: 
        QAction *openAction; 
//...

注意,不要忘记QAction类的前向声明哦!要不就会报错的!

然后我们要在cpp文件中添加QAction的定义。为了简单起见,我们直接把它定义在构造函数里面:

        openAction = new QAction(tr("&Open"), this); 
        openAction->setShortcut(QKeySequence::Open); 
        openAction->setStatusTip(tr("Open a file."));

第一行代码创建一个QAction对象。QAction有几个重载的构造函数,我们使用的是

QAction(const QString &text, QObject* parent);

这一个。它有两个参数,第一个text是这个动作的文本描述,用来显示文本信息,比如在菜单中的文本;第二个是parent,一般而言,我们通常传入this指针就可以了。我们不需要去关心这个parent参数具体是什么,它的作用是指明这个QAction的父组件,当这个父组件被销毁时,比如delete或者由系统自动销毁,与其相关联的这个QAction也会自动被销毁。

如果你还是不明白构造函数的参数是什么意思,或者说想要更加详细的了解QAction这个类,那么就需要自己翻阅一下它的API文档。前面说过有关API的使用方法,这里不再赘述。这也是学习Qt的一种方法,因为Qt是一个很大的库,我们不可能面面俱到,因此只为说道用到的东西,至于你自己想要实现的功能,就需要自己去查文档了。

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

第三句是setStatusTip函数。这是添加状态栏的提示语句。状态栏就是主窗口最下面的一条。现在我们的程序还没有添加状态栏,因此你是看不到有什么作用的。

下面要做的是把这个QAction添加到菜单和工具条:

        QMenu *file = menuBar()->addMenu(tr("&File")); 
        file->addAction(openAction); 
 
        QToolBar *toolBar = addToolBar(tr("&File")); 
        toolBar->addAction(openAction);

QMainWindow有一个menuBar()函数,会返回菜单栏,也就是最上面的那一条。如果不存在会自动创建,如果已经存在就返回那个菜单栏的指针。直接使用返回值添加一个菜单,也就是addMenu,参数是一个QString,也就是显示的菜单名字。然后使用这个QMenu指针添加这个QAction。类似的,使用addToolBar函数的返回值添加了一个工具条,并且把这个QAction添加到了上面。

好了,主要的代码已经写完了。不过,如果你只修改这些的话,是编译不过的哦!因为像menuBar()函数返回一个QMenuBar指针,但是你并没有include它的头文件哦!虽然没有明着写出QMenuBar这个类,但是实际上你已经用到了它的addMenu函数了,所以还是要注意的!

下面给出来全部的代码:

1. mainwindow.h

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 
 
#include <QtGui/QMainWindow> 
 
class QAction; 
 
class MainWindow : public QMainWindow 

        Q_OBJECT 
 
public: 
        MainWindow(QWidget *parent = 0); 
        ~MainWindow(); 
 
private: 
        QAction *openAction; 
}; 
 
#endif // MAINWINDOW_H

2. mainwindow.cpp

#include <QtGui/QAction> 
#include <QtGui/QMenu> 
#include <QtGui/QMenuBar> 
#include <QtGui/QKeySequence> 
#include <QtGui/QToolBar> 
#include "mainwindow.h" 
 
MainWindow::MainWindow(QWidget *parent) 
        : QMainWindow(parent) 

        openAction = new QAction(tr("&Open"), this); 
        openAction->setShortcut(QKeySequence::Open); 
        openAction->setStatusTip(tr("Open a file.")); 
 
        QMenu *file = menuBar()->addMenu(tr("&File")); 
        file->addAction(openAction); 
 
        QToolBar *toolBar = addToolBar(tr("&File")); 
        toolBar->addAction(openAction); 

 
MainWindow::~MainWindow() 

 
}

main.cpp没有修改,这里就不给出了。下面是运行结果:

很丑,是吧?不过我们已经添加上了菜单和工具条了哦!按一下键盘上的Alt+F,因为这是我们给它定义的快捷键。虽然目前挺难看,不过以后就会变得漂亮的!想想看,Linux的KDE桌面可是Qt实现的呢!

时间: 2024-07-30 05:22:44

qt 工具栏和菜单栏的相关文章

[ExtJs5.1.0系列-第4天] 工具栏和菜单栏

工具栏和菜单栏 前两节的内容,我们介绍了信息提示框和进度条,对ExtJs组件的配置及使用有了一定认识.本节内容将介绍工具栏(Ext.toolbar.Toolbar)组件和菜单(Ext.menu.Menu)组件的使用. 1.认识 Ext.toolbar.Toolbar Ext.toolbar.Toolbar是工具栏的基础组件,它相当于容器,在其中可以放置各种工具栏元素,主要包括按钮.文字和菜单组件.下表中给出了Ext.toolbar.Toolbar组件的主要配置项及常用方法: 配置项 类型 说明

VISIO中的工具栏、菜单栏丢失的原因及解决办法

症状 在 Microsoft Visio 中,您可能会遇到一个或多个以下症状: 您所了解的工具栏是启用是不可见的. 找不到菜单栏. 按钮从工具栏中消失了. 原因 如果您意外地拖动工具栏或菜单栏可见屏幕区域之外,则会出现这些症状. 如果满足下列条件之一为真,则也会发生类似问题: 显示分辨率是太低,无法显示工具栏上的所有按钮. 两个工具栏停靠在同一行上相邻. 在这种情况下 Visio 会隐藏一些按钮. 解决方案 若要恢复工具栏或菜单栏,使用下列方法之一: 将显示分辨率设置为 800 x 600 或更

禁用IE的工具栏、菜单栏、状态栏、最大化功能

从一个页面跳转到WebFrame.aspx页面,并且禁用IE的工具栏.菜单栏.状态栏.最大化功能,且IE最大化 <script type="text/javascript"> function OpenWebFrame() { window.opener = null; window.open("WebFrame.aspx", "", "width=" + screen.availWidth + ",he

Qt学习三 - 菜单栏、工具栏、状态栏

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); /** QAction是Qt中用于添加动作的类, * 可以将它添加在菜单,作为一个菜单项,也可以添加到工具栏,作为一个工具栏按钮 * 其中参数一是设置该操作按钮的图标,":/images/icon"是资源文件的路径 * 参数二中"&"号代表设

wxpython 创建工具栏和菜单栏

下面看一下关于创建工具栏,状态栏和菜单的方法,看下面一个例子: import wx class ToolBarFrame(wx.Frame): def __init__(self,parent,id): wx.Frame.__init__(self,parent,id,'ToolBar',size=(300,200)) panel=wx.Panel(self) panel.SetBackgroundColour('white') statusBar=self.CreateStatusBar()

[ExtJs5.1.0系列-第5天]工具栏和菜单栏(2)-菜单栏介绍

----------------------------------------------------------------------------------------------- 菜 单 栏 介 绍 分 割 线 ----------------------------------------------------------------------------------------------- 菜单栏使用介绍 菜单组件相当于菜单项的容器,在菜单组件中不但可以容纳Ext.menu

C# winfrom容器布局与工具栏&amp;&amp;右键菜单栏&amp;&amp;隐藏显示小图标的的简单事件

前两天的时候学习了winfrom,简单地说就是各种布局,然后给按钮,textbox等各种控件添加各种事件的操作,经过前天一晚上,昨天一天的练习操作的还算熟练,但是对构造函数传值还是不是很了解,由于各种原因,只能再练习里多多注意了: 1.容器布局: 布局一定要设置好最小的可拖拽的大小,最大最好也设置,否则会导致控件乱七八糟: Anchor属性针对于某一个控件,可以对控件进行边距的设置来控制控件的位置: Dock属性可以把控件或者容器固定到一个位置,进行更方便的布局,最实用的就是用Dock控制Pan

Ubuntu10.04下安装Qt4和创建第一个Qt程序

1.首先安装Qt4并采用Qt Creator进行开发演示 (1)在Terminal中输入: sudo apt-get install qt4-dev-tools qt4-doc qt4-qtconfig qt4-demos qt4-designer 其中: qt4-dev-tools 中包括了Qt Assistant,Qt Linguist,Qt Creator     qt4-doc 这个是帮助文档     qt4-qtconfig Qt的配置工具,这个装好默认好     qt4-demos

MinGW32 +QT4.8.6+QT Creator+CMAKE的安装

参考网址: http://www.360doc.com/content/15/0813/09/7256015_491331699.shtml http://m.fx114.net/qa-196-213466.aspx: http://anyof.me/articles/264: 1.首先是下在下载: MinGW 下载地址: http://qt-project.org/downloads; 库的下载地址: http://qt-project.org/downloads; 说明: qt-everyw