我是靠谱客的博主 魁梧板凳,最近开发中收集的这篇文章主要介绍菜单项的定制,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);
}

 效果图:

 

结束语

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

最后

以上就是魁梧板凳为你收集整理的菜单项的定制,QWidgetAction的使用——Qt前言代码和效果结束语的全部内容,希望文章能够帮你解决菜单项的定制,QWidgetAction的使用——Qt前言代码和效果结束语所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部