Qt——弹簧(QSpacerItem)的妙用

        问题引入:

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

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

弹簧(QSpacerItem)

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

头文件

       #include

 两个比较重要的函数

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);

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

Qt——弹簧(QSpacerItem)的妙用_第1张图片

/**************************隐藏 弹簧******************************/
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();
}

你可能感兴趣的:(Qt,qt,开发语言)