`
izuoyan
  • 浏览: 9220841 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Qt学习之路(12): 菜单和工具条

阅读更多
版权声明: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://devbean.blog.51cto.com/448512/205034
在前面的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实现的呢!

本文出自 “豆子空间 ” 博客,请务必保留此出处http://devbean.blog.51cto.com/448512/205034

分享到:
评论

相关推荐

    qt学习之路

    `,让程序进入消息循环,等待可能的菜单、工具条、鼠标等的输入,并进行响应。 二、连接信号和响应函数 连接信号和响应函数是Qt的核心机制之一。该机制允许开发者连接控件的信号到slot函数上,以便响应用户的交互...

    Qt学习之路---尤其适用Qt初学者

    9. **菜单和工具条** —— 学习如何为应用程序添加菜单和工具条,提升用户体验。 10. **事件处理** —— 介绍Qt的事件系统,包括事件的接收、忽略、自定义等。 11. **QPainter** —— 了解Qt的绘图系统,学会如何...

    qt学习之路.pdf

    本节通过实例介绍了如何在Qt中创建和使用菜单以及工具条。 11. 状态栏 状态栏用于显示应用程序的状态信息。本节讲述了如何添加和使用状态栏来提升用户体验。 12. 标准对话框 Qt提供了多个预定义的标准对话框,本节...

    PyQt5学习(一):制作菜单、工具条,并在状态栏中动态显示实时时间

    学习了PyQt5制作菜单和工具条,期间遇到一些问题,现在都一一解决了,心情大好。 是在PyCharm20.1中编写的代码。 首先引入库 import sys from PyQt5 import QtWidgets,QtGui,QtCore from PyQt5.QtCore import Qt ...

    QT界面框架(滑动导航条+伸缩菜单)

    本文将详细解析"QT界面框架(滑动导航条+伸缩菜单)"这一主题,以及如何利用QT库实现滑动导航条和伸缩菜单。 首先,QT是Qt Company开发的一个开源跨平台应用程序开发框架,它基于C++,提供了丰富的API和面向对象的...

    Qt5学习之路2

    Qt5学习之路2涵盖了多个方面的知识点,这包括但不限于Qt基础,GUI组件,信号槽机制,Qt模块,事件处理,绘图系统,模型/视图架构,网络与数据库操作,以及QML和QtQuick2。本部分将会对这些知识点做详细说明。 ### ...

    Qt实现的浮动工具箱

    本项目是基于Qt实现的浮动工具箱,它允许用户在屏幕上自由移动和定位工具箱,增强了用户的交互体验。在这个系统中,浮动窗口是关键,而动态布局则是实现控件灵活展示的核心技术。 ### 一、Qt浮动窗口 浮动窗口是相...

    QT中如何添加工具条教程

    在 Qt 中添加工具条是开发桌面应用程序的常见需求,本文将介绍如何在 Qt 中添加工具条,添加菜单和状态栏。 首先,需要了解 Qt 中的资源文件(.qrc 文件),它是一个 XML 格式的文本文件,用于存储图标、图片、音频...

    Qt学习之路

    ### Qt学习之路知识点详解 #### 一、前言:Qt简介及优势 - **Qt**是一种跨平台的应用程序开发框架,主要使用C++语言编写,同时也支持Qt Quick和QML来构建用户界面。Qt框架提供了丰富的API,可以用于开发桌面应用、...

    qt之简易画板

    QMainWindow提供了菜单栏、工具栏和状态栏的集成,便于扩展功能。 1. **初始化项目** - 使用Qt Creator创建一个新的Qt Widgets Application项目。 - 在.pro文件中,确保包含必要的库,如`QT += widgets gui`。 2...

    基于Qt5的桌面悬浮窗工具

    此外,对于想要深入学习Qt5的开发者,可以参考该项目的源代码,分析其设计模式和架构,学习如何组织和模块化代码,以及如何优化性能。这个工具不仅是一个实用的应用,也是一个很好的学习资源,可以帮助开发者提升在...

    Qt+学习之路

    - **整体评价**:《Qt学习之路2》是一本非常适合初学者入门Qt的书籍,内容涵盖了Qt的基本概念和技术细节。 - **未来发展**:随着Qt5的发布,该书的部分内容可能需要更新,但其核心理念仍然非常有价值。 - **建议**:...

    Qt学习之路(1-60)

    在“菜单和工具条”部分,学习者将学习如何添加菜单栏、工具栏以及状态栏到应用程序中。这些是构成桌面应用程序用户界面的基本元素。 ### 标准对话框 Qt提供了一系列标准对话框,如文件对话框(QFileDialog)、颜色...

    PyQt菜单栏和工具条制作.rar

    本教程将深入探讨如何使用PyQt5构建菜单栏和工具条,这是任何应用程序中常见且重要的交互元素。 首先,菜单栏是位于窗口顶部的一系列下拉菜单,通常包含各种操作选项。在PyQt5中,`QMenuBar`类用于创建菜单栏。创建...

    Qt5.10+GUI完全参考手册,qt5.15.2,QT

    4. **Qt主窗口**:`QMainWindow` 类是构建复杂应用程序的基类,它提供了菜单栏、工具栏、状态栏和 dockable 视图等功能。开发者可以利用它来构造具有专业外观的应用。 5. **布局管理**:Qt的布局管理器使得窗口部件...

    Qt-MusicPlayer_MainWindow音乐_qt音乐播放器_QT_音乐播放器_

    在Qt中,MainWindow是一个继承自QMainWindow的类,提供了菜单栏、工具栏、状态栏等基础元素,开发者可以在这个基础上添加自定义的控件和功能。 【qt音乐播放器】部分,核心是利用Qt的多媒体模块(QMediaPlayer和...

    python Qt学习手册

    Qt库提供了丰富的组件,如按钮、文本框、滚动条、菜单、对话框等,以及布局管理器来优化窗口元素的排列。同时,Qt的设计模式遵循Model-View-Controller(MVC)架构,有助于实现代码的模块化和可维护性。 本书可能...

    嵌入式QT学习PDF

    最后,整个学习资料通过安博牛耳的教育体系,为学习者提供了一条系统学习嵌入式QT开发的道路,从基础的GUI开发到更高级的网络编程和数据库集成,帮助开发者构建出功能强大且用户友好的嵌入式应用。通过深入学习这套...

Global site tag (gtag.js) - Google Analytics