成都创新互联网站制作重庆分公司

QMenu下的QAction文字按对齐方式显示-创新互联

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

成都创新互联是专业的网站建设公司,提供网站建设,网站制作,网站设计等网站开发一体化解决方案;包括成都h5网站建设,小程序制作,网站定制,企业网站建设,电子商务商城网站建设,成都响应式网站建设公司,建网站,PHP网站建设,软件开发,软文营销,网站营销。欢迎做网站的企业前来合作洽谈,成都创新互联将竭诚为您服务!

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

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文名称:QMenu下的QAction文字按对齐方式显示-创新互联
本文链接:http://cxhlcq.com/article/dgpgpo.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部