主窗口MainWindow需要菜单栏QMenuBar及菜单QMenu来组成自身,一般应用程序的所有功能都能在菜单中找到。接下来就来说说它们。

QMenu

它添加了很多动作QAction,并用自身组成了菜单栏QMenuBar上的菜单,当然也可用于基它地方,如上下文菜单等。

公有函数如下:

QMenu(QWidget * parent = )
QMenu(const QString & title, QWidget * parent = )
~QMenu() QAction * addAction(const QString & text)//添加动作
QAction * addAction(const QIcon & icon, const QString & text)
QAction * addAction(const QString & text, const QObject * receiver, const char * member, const QKeySequence & shortcut = )//尝试失败,求教const char * member该如何?
QAction * addAction(const QIcon & icon, const QString & text, const QObject * receiver, const char * member, const QKeySequence & shortcut = )
void addAction(QAction * action) QAction * addMenu(QMenu * menu)//添加菜单
QMenu * addMenu(const QString & title)
QMenu * addMenu(const QIcon & icon, const QString & title)
QAction * insertMenu(QAction * before, QMenu * menu) QAction * addSection(const QString & text)//
QAction * addSection(const QIcon & icon, const QString & text) QAction * addSeparator()//添加分隔线 QAction * insertSection(QAction * before, const QString & text)
QAction * insertSection(QAction * before, const QIcon & icon, const QString & text)
QAction * insertSeparator(QAction * before) void popup(const QPoint & p, QAction * atAction = )//该菜单在p坐标点弹出
QAction * exec()//该菜单在0,0 坐标出现,执行后阻塞程序,返回点击的动作或0(什么也没点,如按Esc键)
QAction * exec(const QPoint & p, QAction * action = )//上同,位置一般为:1,鼠标位置exec(QCursor::pos());2,与某部件对齐exec(somewidget.mapToGlobal (QPoint(, )));,通过QMouseEvent *e,exec(e->globalPos());
void hideTearOffMenu()
void clear()//清除菜单中的所有项 void setActiveAction(QAction * act)
void setAsDockMenu()
void setDefaultAction(QAction * act)
void setIcon(const QIcon & icon)
void setSeparatorsCollapsible(bool collapse)
void setTearOffEnabled(bool)
void setTitle(const QString & title)
void setToolTipsVisible(bool visible) QIcon icon() const
QAction * defaultAction() const
QString title() const
NSMenu * toNSMenu()
bool toolTipsVisible() const
QAction * actionAt(const QPoint & pt) const
QRect actionGeometry(QAction * act) const
QAction * activeAction() const
bool isEmpty() const
bool isTearOffEnabled() const
bool isTearOffMenuVisible() const
QAction * menuAction() const
bool separatorsCollapsible() const

Signals

void aboutToHide()
void aboutToShow()
void hovered(QAction * action)
void triggered(QAction * action)

静态成员函数Static Public Members,可用它将一些actions组合成一个菜单

QAction * exec(QList<QAction *> actions, const QPoint & pos, QAction * at = 0, QWidget * parent = 0)

————————————————————————————————————————————————————————————————

QMenuBar

它是主窗口存放菜单的地方。

在windows上可认为它就是那个大理石颜色的一栏

函数如下:

   QMenuBar(QWidget * parent = )
~QMenuBar()
QAction * addMenu(QMenu * menu)//以下几个添加菜单的比较常用
QMenu * addMenu(const QString & title)
QMenu * addMenu(const QIcon & icon, const QString & title) void setActiveAction(QAction * act)
void setCornerWidget(QWidget * widget, Qt::Corner corner = Qt::TopRightCorner)//在菜单条的最左或最右添加个小部件,corner可以为Qt::TopRightCorner(最右)或 Qt::TopLeftCorner(最左)
void setDefaultAction(QAction * act)//只支持Windows Mobile,手机上的“左软键”
void setDefaultUp(bool)//默认false,菜单正常地下拉显示,如设成false,则菜单往上拉显示
void setNativeMenuBar(bool nativeMenuBar)//菜单本地化,只支持Mac OS X和Windows CE。我想,如ubuntu上,当窗口最大化时,菜单附着于最上一栏一样吧……(On t<span style="white-space:pre"> </span>hese platforms if this property is true, the menubar is used in the native menubar and is not in the window of its parent, if false the me<span style="white-space:pre"> </span>nubar remains in the window.On other platforms the value of this attribute has no effect.)
void clear()//清除所有action QWidget * cornerWidget(Qt::Corner corner = Qt::TopRightCorner) const
QAction * defaultAction() const
bool isDefaultUp() const
bool isNativeMenuBar() const
NSMenu * toNSMenu()
QAction * actionAt(const QPoint & pt) const
QRect actionGeometry(QAction * act) const
QAction * activeAction() const QAction * addAction(const QString & text)//以下四个添加动作或菜单,该动作将直接显示在菜单条上,感觉四个函数都比较让人无语,想不出官方添加它们的用意!
QAction * addAction(const QString & text, const QObject * receiver, const char * member)
void addAction(QAction * action)
QAction * insertMenu(QAction * before, QMenu * menu) QAction * addSeparator()//在菜单条上添加分隔线,试了下,没看到效果,和以上四个一样让人无语
QAction * insertSeparator(QAction * before)

Public Slots

virtual void setVisible(bool visible)

Signals

void hovered(QAction * action)
void triggered(QAction * action)//点击触发的动作,可用它判断是哪个动作触发,代替信号槽的使用

—————————————————————————————————————————————————————————————————

简单测试示例如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QAction>
#include <QPushButton>
#include <QCursor>
#include <QKeySequence>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this); QMenu *menu1= new QMenu("hello");
menu1->addAction("菜单项1");
menu1->addAction("菜单项2");
if(QAction *act=menu1->exec(QCursor::pos()))
{
qDebug()<< act->text() <<"triggered";
} file_menu=new QMenu("文件");
file_menu->addAction("打开");//可用返回的QAction 连接槽函数
//file_menu->addAction("退出",this,exit,QKeySequence("Ctrl+E"));//失败
file_menu->addSeparator();
file_menu->addSection("Section");//貌似无效果
file_menu->addMenu(menu1);
ui->menuBar->addMenu(file_menu); QPushButton *btn=new QPushButton("hello");
ui->menuBar->setCornerWidget(btn,Qt::TopLeftCorner);
ui->menuBar->setDefaultUp(true); } MainWindow::~MainWindow()
{
delete ui;
}

Qt Widgets——菜单和菜单栏的更多相关文章

  1. Qt Widgets——主窗口及其主要组成部分

    Main Window and Related Classes QAction 动作类,用于当做一个菜单项或工具项插入菜单或工具栏 QActionGroup 动作组,用于管理多个动作,设置它们之间的互 ...

  2. qt之菜单项定制

    qt实现菜单,简单的界面QMenu+QAction完全可以实现,在加上qss的支持,可以定制出比较美观的菜单,qt的菜单一般用在托盘.按钮和工具栏上. 当然啦,也有很多软件有比较美观的托盘菜单,比如3 ...

  3. Qt Widgets Application可执行程序发布方式

    前言 写好的Qt程序想打包发布,之前按照Qt快速入门系列教程里的方法,直接选release,构建,之后找到exe,拷贝几个dll,然而报错如图: 后来找到教程:http://tieba.baidu.c ...

  4. QT5中的pro文件中为何要加入"QT += widgets"

    在pro文件里写"QT+=widgets"表示引入QtWidget这个module,qmake在生成makefile的时候,会设置好include path 和 lib path, ...

  5. 【QT相关】Qt Widgets Module

    Qt Widgets Module:提供了一些列UI元素. 使用: //头文件包含 #include <QtWidgets> //链接模式,在.pro文件中添加行: QT += widge ...

  6. Qt4项目迁移到Qt5问题:greaterThan(QT_MAJOR_VERSION, 4): QT += widgets .

    文章来源:http://blog.csdn.net/ccf19881030/article/details/18220447 问题一:错误:C1083: 无法打开包括文件:"QApplica ...

  7. Qt Widgets、QML、Qt Quick的区别

    Qt Widgets.QML.Qt Quick的区别 简述 看了之前关于 QML 的一些介绍,很多人难免会有一些疑惑: Q1:QML 和 Qt Quick 之间有什么区别? Q2:QtQuick 1. ...

  8. 【Qt官方例程学习笔记】Getting Started Programming with Qt Widgets

    创建一个QApplication对象,用于管理应用程序资源,它对于任何使用了Qt Widgets的程序都必要的.对于没有使用Qt Widgets 的GUI应用,可以使用QGuiApplication代 ...

  9. 公布Qt Widgets桌面应用程序的方法

    公布Qt Widgets桌面应用程序的方法 Qt是一款优秀的跨平台开发框架,它能够在桌面.移动平台以及嵌入式平台上执行.眼下Qt 5介绍程序公布的文章帖子比較少.大家又很想要知道怎样公布Qt应用程序, ...

随机推荐

  1. ZTree 获取选中的项

    var zTreeOjb = $.fn.zTree.getZTreeObj("zTreeId"); //ztree的Id zTreeId 获取复选框/单选框选中的节点:var ch ...

  2. 提高R语言速度--转载

    1.     参考<R语言编程艺术>(Norman Matloff) chapter 14 & chapter 15 2.     方法 (1)向量化 与非向量化-循环做个对比: ...

  3. Vue--获取数据

    一.Jsonp抓取数据 用 npm 安装 jsonp npm install jsonp 创建 jsonp.js import originJsonp from 'jsonp' export defa ...

  4. JS代码排版工具

    有时候从网页上下载的js文件删除了空格,看起来就是一整段,还是蛮影响开发效率的,在CSDN上找到一个排版工具,用掉了我最后一个积分,所以在这儿分享一下: 百度云:链接:http://pan.baidu ...

  5. 百度“搜索设置”之基于定位下拉框或者需要点击link才显示的下拉框,二次定位与多次定位实现的实际效果区别

    还是基于上次那个练习的后续出现的思考,http://www.cnblogs.com/8013-cmf/p/6555790.html 界面: 源码: 写法如下:  继续解释这两种的区别: 1.其实基于定 ...

  6. leecode第四十六题(全排列)

    class Solution { public: vector<vector<int>> permute(vector<int>& nums) { int ...

  7. U8工具栏特别小是怎么回事

    用友的工具栏特别窄了,填制凭证里的保存.增加凭证等按钮因为工具栏特别窄都看不清了 解决方法:正常机器下的system32下面的mscomctl.ocx文件替换到有问题的机器下,您的系统应该是XP的,这 ...

  8. 基于 Spring Cloud 完整的微服务架构实战

    本项目是一个基于 Spring Boot.Spring Cloud.Spring Oauth2 和 Spring Cloud Netflix 等框架构建的微服务项目. @作者:Sheldon地址:ht ...

  9. lncRNA表达定量方法评估

    见文章:Benchmark of lncRNA Quantification for RNA-Seq of Cancer Samples Overall, 10-16% of lncRNAs can ...

  10. 如何跳过开机密码进入windows系统

    工具:安装好PE系统的u盘一个. 开机时按F12(每个电脑不同)进入PE系统,将c盘目录下的SAM文件拷入自己的u盘内.SAM文件的位置:  C:\WINDOWS\system32\config\SA ...