Qt——弹簧(QSpacerItem)的妙用

        问题引入:

        在界面设计时,经常会出现多种显示方式:按钮在整个页面下居中显示;按钮在页面的偏右侧居中显示。针对如上需求,如何采用一种布局适应多种显示场景?

        总结:Qt有一个很重要的控件—弹簧(spacer):弹簧在没有布局的窗口中是没有什么作用的,所以只有在layout中才能显现作用。弹簧分水平和垂直弹簧,两者除方向不同以外,其他均相同。

弹簧(QSpacerItem)

        弹簧分为水平/垂直弹簧:QSpacerItem(Horizontal Spacer 、Vertical Spacer)。

头文件

       #include <QSpacerItem>

 两个比较重要的函数

QSpacerItem(int w, int h, QSizePolicy::Policy hPolicy = QSizePolicy::Minimum, QSizePolicy::Policy vPolicy = QSizePolicy::Minimum);

备注:常用于初始化构造弹簧时,设置固定或可变大小的区域。

void changeSize(int w, int h, QSizePolicy::Policy hPolicy = QSizePolicy::Minimum, QSizePolicy::Policy vPolicy = QSizePolicy::Minimum);

备注:常用于动态改变弹簧的大小,设置大小变化及隐藏功能时使用。 

/**************************隐藏 弹簧******************************/
ui->horizonSpacer->changeSize(0, 0); 

/**************显示并改变 horizon 类型的 弹簧*********************/
ui->horizonSpacer->changeSize(20, 20, QSizePolicy::Expanding); 

/**************显示并改变 vertical 类型的 弹簧********************/
ui->verticalSpacer->changeSize(20, 20, QSizePolicy::Preferred, QSizePolicy::Expanding);

 详细实现步骤

 1、在layout中嵌入一个固定的弹簧

void InitControls()
{
    m_pCustomLayout = new QHBoxLayout;  //创建水平布局
    m_pCustomLayout->setContentMargins(0,0,0,0);
    m_pCustomLayout->setSpacing(30);
    
    //为水平布局左侧,添加固定长度120大小的弹簧
    m_pLeftHorizonSpacer = new QSpacerItem(120,20,QSizePolicy::Fixed,QSizePolicy::Minimum);
    m_pCustomLayout->addItem(m_pLeftHorizonSpacer);
    m_pCustomLayout->addStretch(1);  //均分布局(使按钮居中)

    //btn_ok按钮
    btn_ok = new QPustButton(this);    
    m_pCustomLayout->addWidget(btn_ok);

    //btn_cancel按钮
    btn_cancel = new QPushButton(this); 
    m_pCustomLayout->addWidget(btn_cancel);
    m_pCustomLayout->addStretch(1); //均分布局(使按钮居中)
  
   //将layout布局加入到界面中
   setLayout(m_pCustomLayout);
}

2、提供外置接口,用于动态改变弹簧大小(改变大小或隐藏均可)

void SetCenterButtonStyle()  
{
    m_pLeftHorizonSpacer->changeSize(0, 0);
    m_pCustomLayout->update();
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值