Qt菜单栏


Qt 窗口是通过 QMainWindow类 来实现的

img

创建菜单栏

Qt 中的菜单栏是通过 QMenuBar 这个类来实现的,一个窗口最多只有一个菜单栏。

菜单栏包含了菜单,而菜单又包含了菜单项

img

上图可以看出,菜单里面不只是可以包含菜单项,也可以包含菜单,这种被菜单包含的菜单成为子菜单

可以有两种方式创建菜单栏:

QMenuBar *menuBar = new QMenuBar();
this->setMenuBar(menuBar);
QMenuBar *menuBar = this->menuBar();
this->setMenuBar(menuBar);

对于菜单栏而言,在QMainWindow类对象被创建出来时默认是自动生成了一个菜单栏的。

因此对于第一种方式而言:通过重新new出来一个 QMenuBar 对象再赋值给 this,这种方式就会导致 this 默认自动生成的菜单栏被挤出对象树,这种情况就会导致找不到默认的菜单栏从而无法释放。虽然对于客户端而言这一点点的泄漏问题可以不会很大,但是还是做到尽量完美。

对于第二种方式而言:this->menuBar() 会有两种情况:当 this 没有菜单栏时会自动生成一个菜单栏;当 this 有菜单栏时就获取已有的菜单栏。所以第二种方式就不会多生成出额外的菜单栏对象,也就不会出现内存泄漏的情况。

创建菜单并在菜单栏中添加

菜单的类型为 QMenu,菜单栏通过 addMenu 函数去添加菜单

// 创建菜单
// (&?):设置快捷键(?可以是任一字母)
// 菜单的快捷键需要搭配 alt 键使用
QMenu *m1 = new QMenu("文件(&F)");
QMenu *m2 = new QMenu("编辑(&E)");
QMenu *m3 = new QMenu("构建(&B)");

// 将菜单加到菜单栏
menuBar->addMenu(m1);
menuBar->addMenu(m2);
menuBar->addMenu(m3);

img

创建子菜单并添加到菜单

添加子菜单的方式:先创建出需要的子菜单(子菜单也是菜单,也是 QMenu 类型),然后菜单可以通过 addMenu 函数添加子菜单。

// 创建子菜单
QMenu *c1 = new QMenu("最近打开文件");
// 将子菜单加到菜单
m1->addMenu(c1);

img

创建菜单项并在菜单中添加

在 Qt 中并没有专门的菜单项类,可以通过 QAction 类抽象出公共的动作。

菜单项也可以为自己添加图标,setIcon(QIcon *)

// 创建菜单项
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CHJBL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值