2017-06-05 82 views
0

我在将QLabel垂直居中置于QHBoxLayout内有点问题。相关一张我的代码如下:在水平布局中垂直居中标签

QFrame* topBar = new QFrame(); 
topBar->setStyleSheet("background-color: #2c3d50;border-bottom: 3px solid #2c92b6;"); 
topBar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); 
topBar->setFixedHeight(24); 

QHBoxLayout* topBarLayout = new QHBoxLayout(); 
    QLabel* label = new QLabel("MSFT"); 
    label->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); 
    label->setStyleSheet("font-size: 15px;font-weight: bold;border: 0px;"); 
    label->setMinimumHeight(15); 
    topBarLayout->addWidget(label); 

topBar->setLayout(topBarLayout); 
topLayout->addWidget(topBar); 

我的地方目标是有垂直居中的标签。我的尝试:

  1. Qt::AlignVCenter - 没有影响
  2. QSizePolicy::PreferredSizeQSizePolicy::Expanding造成垂直收缩标签不minimumHeight/fixedHeight,在这里我希望它自由扩展到父
  3. 的高度变化minimumHeight或加入padding/margin:,这只会继续向下移动QLabel

Described above

我的最终目标是要建立固定的高度和可变宽度的条(照片中的暗蓝色的东西),与标签和按钮(如标题,关闭,最大化等)对齐在两边,不管酒吧的宽度。

因特网和说,增加另一个QBoxLayout居中Label垂直可以解决这个问题,但我会加入大量的组件是吧,所以这个“解决方案”将是非常不切实际的。

TL; DR:如何在水平布局中将Label(或其文本)垂直对齐?

+0

@ G.M。正如我的文章所述,使用alignment属性并不是很有帮助,结果如图所示。 – user35443

+0

@GCyrillus这是Qt,HTML不会生成,样式表在上面的代码片段中。 – user35443

+0

如果您只是将调用移除到'setSizePolicy',会发生什么? –

回答

2

试图改变布局的顶部/底部的利润率,并保持Qt::AlignVCenter

topBarLayout->setContentsMargins(9,0,9,5); 
+1

从我测试的它默认情况下垂直居中,我不需要'Qt :: AlignVCenter'。 – ymoreau

+0

谢谢,这工作。正如@ymoreau提到的,'Qt :: AlignVCenter'没有必要。 – user35443