189 8069 5689

QMenu下的QAction文字按对齐方式显示

  菜单栏( 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 );
}

效果图如下:

QMenu 下的 QAction 文字按对齐方式显示


网站栏目:QMenu下的QAction文字按对齐方式显示
网页网址:http://cdxtjz.cn/article/jcshid.html

其他资讯