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

  菜单栏( QMenu )下的动作是由QAction来实现。有时需要对QAction的文字显示做一些要求,如文字左对齐显示、文字显示在图标(QIcon)上下左右方位等。
  查询了QAction的方法,并没有这样的属性实现,而且QAction本身的图标具有强制性,不设置也占位置(自己测试如此,未发现消除图标所占位置的方法)。而网上很多对QAction文字和图标相关属性设置的方法大多为工具栏( QToolBar )下的QAction,即对QToolBar的风格设置方法:setToolButtonStyle(),并没有对菜单栏( QMenu )。
  而其实Qt给提供了实现自定制QAction风格的类,即:QWidgetAction。他有一个指定QWidget的方法:

void setDefaultWidget(QWidget * widget);

这样我们就可以自己绘制想要的效果窗口,然后设置给QAction。相对来说,自由度很高。

下面是我实现的一个例子,仅供参考。

#include <QLabel>
#include <QMenu>
#include <QMenuBar>
#include <QWidgetAction>

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 文字按对齐方式显示

转载于:https://blog.51cto.com/weiyuqingcheng/2048844

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值