概述
显示一个还没定制的右键菜单
要在右键单击时显示弹出式的上下文菜单(a context menu)就要用到QWidget的contextMenuPolicy : Qt::ContextMenuPolicy这个属性啦。这个属性的值可以是一下几个:
常量
值
描述
Qt::NoContextMenu
0
该widget不具有上下文菜单,上下文菜单由其父widget处理
Qt::PreventContextMenu
4
该widget无具有上下文菜单,并且相对于NoContextMenu,处理的操作不会交由fuwidget处理,这意味着所有鼠标右键事件将保证通过QWidget::mousePressEvent(), 和 QWidget::mouseReleaseEvent()传递给widget本身
Qt::DefaultContextMenu
1
widget的QWidget::contextMenuEvent()函数将会被调用
Qt::ActionsContextMenu
2
widget把它的QWidget::actions()作为上下文菜单显示
Qt::CustomContextMenu
3
该widget会发出QWidget::customContextMenuRequested()信号
OK,要显示上下文菜单我们有很多的方式,我写了个随机函数确定了我们要用最后一种作为示范。哈哈哈,我怎么可能这么逗,随便选的啦。。。
下面贴代码(后面这段代码基本不变,就不贴啦):
mainwidget.h
#ifndef MAINWIDGET_H
#define MAINWIDGET_H
#include
class QMenu;
class MainWidget : public QWidget
{
Q_OBJECT
public:
MainWidget(QWidget *parent = 0);
~MainWidget();
private:
void addActionToMenu(QMenu *menu, int length);
};
#endif // MAINWIDGET_H
mainwidget.cpp
#include "mainwidget.h"
#include
MainWidget::MainWidget(QWidget *parent)
: QWidget(parent)
{
setContextMenuPolicy(Qt::CustomContextMenu);
QMenu *menu = new QMenu();
QMenu *subMenu = new QMenu("Sub Menu", this);
addActionToMenu(subMenu, 5);
menu->addMenu(subMenu);
addActionToMenu(menu, 10);
connect(this, &MainWidget::customContextMenuRequested,
menu, [=] {
menu->move(QCursor::pos());
menu->show();
});
}
MainWidget::~MainWidget()
{
}
void MainWidget::addActionToMenu(QMenu *menu, int length)
{
QList acs;
for (int i = 0; i < length; i ++) {
acs << new QAction(QString("Test Menu Item %1").arg(i), menu);
}
menu->addActions(acs);
}
然后我们运行程序,右键弹出的样子大概是这样的:
我们不把现在的样子称为搓,我们称之为原生态O(∩_∩)O
非原生态的来了:
1.新建一个PopupMenuStyle类继承于QProxyStyle
2.给上面的menu设置style(menu->setStyle(new PopupMenuStyle());)
设置完毕,剩下的主要工作就在PopupMenuStyle里了,前面讲的一堆可以过了,就酱。呼呼呼,下一篇详细介绍那几个函数的用法。我是不会一下子在这偏文章把所有东西写完的,不然我周末还能玩耍吗?!
最后
以上就是苗条铅笔为你收集整理的qmenu基本用法_使用QProxyStyle定制QMenu (二)的全部内容,希望文章能够帮你解决qmenu基本用法_使用QProxyStyle定制QMenu (二)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复