@[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)));
记录一下,以后忘了还可以翻一下。