主窗口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. hdu 3208 Integer’s Power 筛法

    Integer’s Power Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  2. 初识unittest

    unittest是python自带的一个标准木块,单元测试框架 unittest基本使用方法: 我们需要先导入unittest (import unittest) import unittest 定义 ...

  3. mysql利用navicat导出表结构和表中数据

    LZ在网上搜索了要如何导出mysql的表结构和表中数据,发现有的方法不好用 记录一下好用的方式: 用navicat打开DB链接后,点击数据库,右击选择转储SQL文件,然后选择结构和数据: 之后弹出新的 ...

  4. Python - requests https请求的坑

    #-*-coding:utf-8-*- # Time:2017/9/25 20:41 # Author:YangYangJun import requests import ssl from requ ...

  5. ICO分享

  6. 到达一个数 Reach a Number

    2018-09-24 14:19:58 问题描述: 问题求解: 初看到这个问题,直觉上认为可以通过BFS遍历解空间进行求解,因为本质上来说,这个问题和棋盘上移动马的问题是一类问题,都是可以转化成图的问 ...

  7. 主元素问题 Majority Element

    2018-09-23 13:25:40 主元素问题是一个非常经典的问题,一般来说,主元素问题指的是数组中元素个数大于一半的数字,显然这个问题可以通过遍历计数解决,时间复杂度为O(n),空间复杂度为O( ...

  8. C# http监听之Nancy.net

    通过winform或者是控制台应用程序监听http请求,之前使用的是微软的HttpListener,参考https://www.cnblogs.com/duanjt/p/5566336.html 然后 ...

  9. (转)UCOSII源代码剖析

    启动工作原理 刚接触操作系统的时候觉得这个最神秘,到底里面做了什么,怎么就成了个操作系统,它到底有什么用,为什么要引进来着个东东.学了之后才知道,原来最根本的思想还是源于汇编里面的跳转和压栈,以调用一 ...

  10. LeetCode--020--括号匹配

    题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空 ...