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)));

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

你可能感兴趣的:(Qt实战遇到的问题总结)