QMenu的自定义内容

@[TOC]QMenu的自定义内容

QMenu的作用

QMenu很常用,也很方便,可以替代很多弹出框,做交互。基础用法就是添加QAction,今天不记录这些。要记录的是QWidgetAction,可以在QMenu里面添加自定义的action。

1、为什么QWidget放在QWidgetAction里面,QMenu不显示?

我需要用到一个自定义的widget放入到QMenu中,但是一直都不显示效果。
然后我就随便放进去一个编辑框,很容易就显示了。

void Widget::initMenu()
{
    m_menu = new QMenu();
    m_menu->setMinimumWidth(500);
    QLineEdit *view = new QLineEdit();
    QWidgetAction *action = new QWidgetAction(m_menu);
    action->setDefaultWidget(view);
    m_menu->addAction(action);
}

void Widget::mousePressEvent(QMouseEvent *evt)
{
    if (evt->button() == Qt::RightButton) {
        m_menu->popup(evt->globalPos());
    }
}

但是当我把QLineEdit换成自定义的CustomWidget后,Qmenu就不显示,很坑爹。后来发现自定义的CustomWidget里面使用布局,就会显示。
如果有哪位大佬知道为什么,请知会下小弟,小弟没有找到原因。
ps:使用自定义widget的时候,可以使用查找子控件做一些事件处理。

2、QMenu在列表中的应用

在QListWidget,QTreeWidget等列表中也可以很方便的使用自定义菜单,处理一些事件。

首先要设置菜单策略:
setContextMenuPolicy(Qt::CustomContextMenu);

然后使用customContextMenuRequested(QPoint)信号实现弹窗
connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slotPopMenu(QPoint)));

记录一下,以后忘了还可以翻一下。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值