十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
菜单栏( QMenu )下的动作是由QAction来实现。有时需要对QAction的文字显示做一些要求,如文字左对齐显示、文字显示在图标(QIcon)上下左右方位等。
查询了QAction的方法,并没有这样的属性实现,而且QAction本身的图标具有强制性,不设置也占位置(自己测试如此,未发现消除图标所占位置的方法)。而网上很多对QAction文字和图标相关属性设置的方法大多为工具栏( QToolBar )下的QAction,即对QToolBar的风格设置方法:setToolButtonStyle(),并没有对菜单栏( QMenu )。
而其实Qt给提供了实现自定制QAction风格的类,即:QWidgetAction。他有一个指定QWidget的方法:
专业从事企业网站建设和网站设计服务,包括网站建设、申请域名、雅安服务器托管、企业邮箱、微信公众号开发、微信支付宝微信小程序定制开发、重庆App定制开发、软件开发、等服务。公司始终通过不懈的努力和以更高的目标来要求自己,在不断完善自身管理模式和提高技术研发能力的同时,大力倡导推行新经济品牌战略,促进互联网事业的发展。
void setDefaultWidget(QWidget * widget);
这样我们就可以自己绘制想要的效果窗口,然后设置给QAction。相对来说,自由度很高。
下面是我实现的一个例子,仅供参考。
#include
#include
#include
#include
QActionWidgetTest::QActionWidgetTest( QWidget *parent )
: QWidget( parent )
{
ui.setupUi(this);
resize( 600, 400 );
QMenuBar* pMenuBar = new QMenuBar( this );
QMenu* pMenu = new QMenu( "MenuTest" );
pMenu->setFixedWidth( 150 );
QWidgetAction* pActionLeft = new QWidgetAction( pMenu );
QWidgetAction* pActionCenter = new QWidgetAction( pMenu );
QWidgetAction* pActionRight = new QWidgetAction( pMenu );
QLabel* pLabLeft = new QLabel( "AlignLeft" );
QLabel* pLabCenter = new QLabel( "AlignCenter" );
QLabel* pLabRight = new QLabel( "AlignRight" );
pLabLeft->setAlignment( Qt::AlignLeft );
pLabCenter->setAlignment( Qt::AlignCenter );
pLabRight->setAlignment( Qt::AlignRight );
pActionLeft->setDefaultWidget( pLabLeft );
pActionCenter->setDefaultWidget( pLabCenter );
pActionRight->setDefaultWidget( pLabRight );
pMenu->addAction( pActionLeft );
pMenu->addAction( pActionCenter );
pMenu->addAction( pActionRight );
pMenuBar->addMenu( pMenu );
}
效果图如下: