菜单项的定制,QWidgetAction的使用——Qt

前言

有时候需要菜单项显示的不仅是简单的文字,需要显示一个控件或界面,这时候QWidgetAction该上场了。

 

代码和效果

QWidgetAction继承的QAction,有QAction一切功能,在此基础上增加了将自定义的widget插入基于action的容器。我看了QWidgetAction的帮助文档,就几个方法:

public:
QWidget *defaultWidget() const
void releaseWidget(QWidget *widget)
QWidget *requestWidget(QWidget *parent)
void setDefaultWidget(QWidget *widget)

protected:
virtual QWidget *createWidget(QWidget *parent)
QList<QWidget *> createdWidgets() const
virtual void deleteWidget(QWidget *widget)

若是只是在菜单项上显示定制的Widget,那么常用的方法更少:用setDefaultWidget将定制的widget插入到action中,若需要则用defaultWidget获取该widget的指针。

若是将QWidgetAction添加到QToolBar,那么就会调用createWidget()。我们可以重新实现这个函数创建自定义的widget。createdWidgets获取所有的由createWidget创建的widget的容器。

我这里只用实现了最常用的QWidgetAction作为菜单项:按钮点击,显示菜单。MenuWidget 为我自定义的widget。

    connect(m_pIconLabel,&QPushButton::clicked,this,&TitleBar::showCustomMenu);
    m_pMyMenu=new QMenu(this);
    m_pShowWidgetAction=new QWidgetAction(this);

    MenuWidget *widget=new MenuWidget(this);
    widget->setFixedSize(400,350);
    m_pShowWidgetAction->setDefaultWidget(widget);
    m_pMyMenu->addAction(m_pShowWidgetAction);

显示菜单和常规的一样的,位置由自己决定

void TitleBar::showCustomMenu()
{
    //Q_UNUSED(pos);
     QWidget *pWindow = this->window();
    int x=pWindow->geometry().x()+this->geometry().x();
    int y=pWindow->geometry().y()+this->height()+3;
    QPoint pos(x,y);
    m_pMyMenu->exec(pos);
}

 效果图:

 

结束语

好了,就这么菜单项的定制就这么简单。

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值