Qt中添加菜单有两种方法:通过QtDesigner添加和手工加代码添加,下面的程序演示了如何手工给应用程序添加菜单
注:Qt中创建上下文菜单的方法有两种:一种是重载contextMenuEvent()函数,另一种是像创建菜单那样新建一个函数并在类的构造函数中调用它。文中使用了第二种方法,大家如果有兴趣可以自己去实现第一种方法
//mymenu.h
#ifndef MYMENU_H
#define MYMENU_H
#include <QMainWindow>
class QAction;
class QMenu;
class MyMenu : public QMainWindow
{
Q_OBJECT
public:
explicit MyMenu(QWidget *parent = 0);
signals:
public slots:
private slots:
void fileOpenActionSlot(); //打开文件动作对应的槽函数
void fileCloseActionSlot(); //关闭文件动作对应的槽函数
private:
void createAction(); //创建动作
void createMenu(); //创建菜单
void createContentMenu(); //创建上下文菜单
private:
QAction *fileOpenAction; //打开文件动作
QAction *fileCloseAction; //关闭文件动作
QMenu *menu; //菜单
};
#endif // MYMENU_H
//mymenu.cpp
#include "mymenu.h"
#include <QAction>
#include <QMenu>
#include <QMenuBar>
#include <QIcon>
#include <QMessageBox>
MyMenu::MyMenu(QWidget *parent) :
QMainWindow(parent)
{
createAction();
createMenu();
createContentMenu();
this->resize(300, 400);
}
/****************************************
* Qt中创建菜单和工具栏需要如下步骤:
* 1. 建立行为Aciton
* 2. 创建菜单并使它与一个行为关联
* 3. 创建工具条并使它与一个行为关联
*****************************************/
void MyMenu::createAction()
{
//创建打开文件动作
fileOpenAction = new QAction(QIcon(tr("images/open.ico")), tr("打开文件"), this);
//设置打开文件动作的快捷键
fileOpenAction->setShortcut(tr("Ctrl + O"));
//设置打开文件动作的提示信息
fileOpenAction->setStatusTip(tr("打开一个文件"));
//关联打开文件动作的信号和槽
connect(fileOpenAction, SIGNAL(triggered()), this, SLOT(fileOpenActionSlot()));
fileCloseAction = new QAction(QIcon(tr("images/close.ico")), tr("关闭文件"), this);
fileCloseAction->setShortcut(tr("Ctrl + Q"));
fileCloseAction->setStatusTip(tr("关闭一个文件"));
connect(fileCloseAction, SIGNAL(triggered()), this, SLOT(fileCloseActionSlot()));
}
void MyMenu::createMenu()
{
/************************************************************************
* menuBar第一次被调用时QMainWindow会产生一个QMenuBar在窗体上,且返回一个QMenu的指针
* menuBar()->addMenu()会生成一个QMenu且返回他的指针
* QMenu加入一个QAction, 就可以对事件进行反应了
* 一个QAction可以被多个地方使用, 与Java的Action一样
**************************************************************************/
menu = this->menuBar()->addMenu(tr("文件"));
menu->addAction(fileOpenAction);
menu->addAction(fileCloseAction);
}
void MyMenu::createContentMenu()
{
this->addAction(fileOpenAction);
this->addAction(fileCloseAction);
//设置如何显示上下文菜单
this->setContextMenuPolicy(Qt::ActionsContextMenu);
}
void MyMenu::fileOpenActionSlot()
{
QMessageBox::warning(this, tr("提示"), tr("你点击了~打开文件~菜单"), QMessageBox::Yes | QMessageBox::No);
}
void MyMenu::fileCloseActionSlot()
{
QMessageBox::warning(this, tr("提示"), tr("你点击了~关闭文件~菜单"), QMessageBox::Yes | QMessageBox::No);
}
//main.cpp
#include <QApplication>
#include <QTextCodec>
#include "mymenu.h"
int main(int argc, char *argv[])
{
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
QApplication app(argc, argv);
MyMenu menu;
menu.show();
return app.exec();
}
程序运行截图如下(由于上下文菜单不好截图,读者可以自行尝试)
分享到:
相关推荐
定制化的Qt菜单 包括: 1. 周边阴影 2. 菜单项的元素(分割符, 控制ICON大小, 文字显示位置与颜色, 子菜单指示符)
我一篇博文里边介绍的如何创建Qt个性化菜单里的例子程序: 博文地址:http://blog.csdn.net/NRC_DouNingBo/archive/2010/05/11/5580302.aspx 里边创建个性化菜单项的两个类已经封装好,可以直接拿来使用。
结合使用QMenu和QAction提供的API实现了一个基于Qt的多级菜单demo,支持右键弹出菜单,稍加修改也同样适用于下拉菜单、按钮菜单等场合。
Qt 中比如LineEdit 、 QTextEdit ,QSpinBox 、 QTextBrowser 等控件右击都会显示菜单, 但是默认都是英文,当然我们也可以屏蔽菜单, 也可以显示,要是显示中文的话就要加载 另外的翻译文件,这里提供了两个关于Qt...
Qt按钮菜单的代码示例。
QT窗口创建菜单,并实现子菜单的功能,适用于初学者
此工程文件包含了菜单以及二级菜单,托盘,样式,好友列表,窗口等基本操作;欢迎关注我博客:http://blog.csdn.net/ly305750665/article/details/53749781
基于Qt5实现的圆环状菜单、支持展开,收缩动画,可拖拽移动、可设置背景色,hover颜色
Qt自带菜单栏为水平菜单栏,在很多实际应用中,需要用到左侧菜单导航栏,即垂直导航栏,本示例使用QMenu、QDialog、事件过滤、QPushButton、鼠标钩子函数等实现了侧边垂直菜单导航栏。
支持定制菜单展开半径、递增角度、起始角度和大小等 说明文章:https://www.cnblogs.com/swarmbees/p/16837670.html
Qt学习之QPushButton添加右键菜单
通过点击Qt中的pushbutton,可以弹出菜单,菜单选项是QAction,可以连接槽完成相应功能。Qt工程是基于Qt5.10.1 32位,Qt Creator 4.5.1(Community)
Qt学习之QPushButton右键菜单
通过基本控件QPushButton,QWidget,实现下拉菜单,可以展开多级菜单。
qt中设计界面,可以用到的菜单图标,png格式,20*20,包括新建,保存,另存为,退出,复制,粘贴等等
Qt5实现的使用鼠标右击即可在相应位置出现一个弹出菜单
QT 自己写菜单模块 可以扩展,同时用的单例进行处理
可以正常编译,编译器是Qt4版本,很适合开发界面使用;代码可以直接拿过来使用。非常好用。
利用QT数据库,解决动态菜单功能的实现.
Qt做的折叠菜单界面,菜单简介大方,可拓展空间大,颜色样式均可根据需求修改,新手学习参考必备,也可直接拿去做项目使用