将文本居中放置在不起作用的矩形上

时间:2014-05-07 14:46:37

标签: c++ text center sfml

我有一个sf::RectangleShape inputFieldRect_和一个sf::Text inputFieldText_,我希望将文本居中放在矩形上,因为sf :: Text的尺寸会有所不同,因为它的字符串长度不同。 / p>

使用inputFieldText_设置inputFieldText_.setString(s);的字符串后(s是用户输入的std::string)我正在调整其位置以便&# 39; s仍在inputFieldRect_的中心。

这是我的代码,但文字左侧太多,底部有点太多,所以没有完全集中:

sf::FloatRect rectBounds = inputFieldRect_.getGlobalBounds();
sf::FloatRect textBounds = inputFieldText_.getGlobalBounds();

inputFieldText_.setPosition(
  rectBounds.left + (rectBounds.width / 2) - (textBounds.width / 2), 
  rectBounds.top + (rectBounds.height / 2) - (textBounds.height / 2)
);

有人可以帮帮我吗?我没有看到这个缺陷。

1 个答案:

答案 0 :(得分:1)

如果文本的数量非常小,我建议您查看文本绘图点的位置:通常从文本基线(Y)和逻辑初始X中绘制文本。第一个角色。逻辑,因为这可能比你期望的更进一步。**

如果这没有帮助,调查是否应该使用LocalBounds可能会有用:有时在框架中,差异并不像看起来那么简单。

**这种差异被称为左方轴承(是的,也有“右方轴承”)。请参阅此页面上的备注:http://msdn.microsoft.com/en-us/library/system.windows.media.glyphrundrawing(v=vs.110).aspx