Qt Widgets——菜单和菜单栏
主窗口MainWindow需要菜单栏QMenuBar及菜单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) |
————————————————————————————————————————————————————————————————
它是主窗口存放菜单的地方。
在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——菜单和菜单栏的更多相关文章
- Qt Widgets——主窗口及其主要组成部分
Main Window and Related Classes QAction 动作类,用于当做一个菜单项或工具项插入菜单或工具栏 QActionGroup 动作组,用于管理多个动作,设置它们之间的互 ...
- qt之菜单项定制
qt实现菜单,简单的界面QMenu+QAction完全可以实现,在加上qss的支持,可以定制出比较美观的菜单,qt的菜单一般用在托盘.按钮和工具栏上. 当然啦,也有很多软件有比较美观的托盘菜单,比如3 ...
- Qt Widgets Application可执行程序发布方式
前言 写好的Qt程序想打包发布,之前按照Qt快速入门系列教程里的方法,直接选release,构建,之后找到exe,拷贝几个dll,然而报错如图: 后来找到教程:http://tieba.baidu.c ...
- QT5中的pro文件中为何要加入"QT += widgets"
在pro文件里写"QT+=widgets"表示引入QtWidget这个module,qmake在生成makefile的时候,会设置好include path 和 lib path, ...
- 【QT相关】Qt Widgets Module
Qt Widgets Module:提供了一些列UI元素. 使用: //头文件包含 #include <QtWidgets> //链接模式,在.pro文件中添加行: QT += widge ...
- Qt4项目迁移到Qt5问题:greaterThan(QT_MAJOR_VERSION, 4): QT += widgets .
文章来源:http://blog.csdn.net/ccf19881030/article/details/18220447 问题一:错误:C1083: 无法打开包括文件:"QApplica ...
- Qt Widgets、QML、Qt Quick的区别
Qt Widgets.QML.Qt Quick的区别 简述 看了之前关于 QML 的一些介绍,很多人难免会有一些疑惑: Q1:QML 和 Qt Quick 之间有什么区别? Q2:QtQuick 1. ...
- 【Qt官方例程学习笔记】Getting Started Programming with Qt Widgets
创建一个QApplication对象,用于管理应用程序资源,它对于任何使用了Qt Widgets的程序都必要的.对于没有使用Qt Widgets 的GUI应用,可以使用QGuiApplication代 ...
- 公布Qt Widgets桌面应用程序的方法
公布Qt Widgets桌面应用程序的方法 Qt是一款优秀的跨平台开发框架,它能够在桌面.移动平台以及嵌入式平台上执行.眼下Qt 5介绍程序公布的文章帖子比較少.大家又很想要知道怎样公布Qt应用程序, ...
随机推荐
- RN 实现简易浏览器
import React, { Component } from 'react'; import { AppRegistry, StyleSheet, Text, View, Dimensions, ...
- CZK 的饮料店
[题目描述] 一天,小学生 cyx 向你请教了一道他不会做的小学数学题,你瞄了一眼题目,发现题目长下面这样. czk 老板开了个饮料连锁店,连锁店共有 n 家,出售的饮料种类相同. 为了促销,czk ...
- FreeCodeCamp---advanced Algorithm Scripting解法
Exact Change 设计一个收银程序 checkCashRegister() ,其把购买价格(price)作为第一个参数 , 付款金额 (cash)作为第二个参数, 和收银机中零钱 (cid) ...
- 《剑指offer》第六十七题(把字符串转换成整数)
// 面试题67:把字符串转换成整数 // 题目:请你写一个函数StrToInt,实现把字符串转换成整数这个功能.当然,不 // 能使用atoi或者其他类似的库函数. #include <ios ...
- 有效利用1 on 1
2019-01-08 16:32:13 感觉1 on 1是浪费时间? 感觉1 on 1时没啥好说? 感觉老板总是不想1 on 1? 怎样才能 升职加薪? 一切都从有效的1 on 1开始!! 什么是1 ...
- SpringBoot集成TkMybatis插件 (二)
一.Tkmybatis的好处 Tkmybatis是在mybatis框架的基础上提供了很多工具,让开发更加高效.这个插件里面封装好了我们需要用到的很多sql语句,不过这个插件是通过我们去调用它封装的各种 ...
- python paramiko自动登录网络设备抓取配置信息
ssh = paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh.connect(hostn ...
- Destructuring Assignment in JS(解构assignment in js)
Destructuring Assignment In JavaScript 更省事,代码显得也清楚. Arrays 传统的声明赋值: let johnDoe = ["John", ...
- 通过.frm和.ibd恢复mysql数据
.frm文件:保存了每个表的元数据,包括表结构的定义等: .ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per_table = 1)产生的存放该表的数据和索 ...
- vue 基础(一)
一 vue.js的M-V-VM思想 MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式. 1.Model指代的就是vue对象的data属性里面的数据.这里的数 ...