0

我有一个不同宽度的框和一个自动换行的文本。每次用户更改框的宽度时,我都需要设置新的高度。该框由 QPainter 在paintEvent(QPaintEvent *)函数中显示。有几种解决方案,例如当前的(不是很聪明,我在resizeEvent(QResizeEvent *)中这样做):

unsigned new_height = 0; // the height i want to find out.
unsigned given_width = width();
QPainter painter (this); // i need painter, because i want to ask it's default font.
QLabel lab;              // the widget that can do word-wrap.
lab.setText( "A word wrapped text" ); // the text
lab.setFont( painter.font() );        // set QPainter's default font.
lab.setWordWrap( true );              // enable word-wrap
new_height = lab.heightForWidth( given_width ); // tada! :)

但是代码有点矫枉过正:
1)在paintEvent(QPaintEvent *)之外创建QPainter不好;
2)但我需要 QPainter 来请求它默认使用什么字体来询问该字体的指标。

我应该更改我的代码并在paintEvent(QPaintEvent *)函数内的QPainter::boundingRect()的帮助下执行此操作吗?但我想减少paintEvent(QPaintEvent *)内的CPU消耗并仅在宽度改变时计算新高度,而不是每次显示时计算新高度。

针对主题的其他解决方案是什么?QFontMectircs?

4

1 回答 1

1

我认为你有正确的想法使用QFontMetrics. 这门课的整个想法是帮助你在这里遇到的情况。看一眼QFontMetricsF::boundingRect()

使用您的目标绘制矩形作为输入矩形,但将高度设置为您的小部件高度的最大值。为了确定,我只是在里面放了一些类似 INT_MAX 的东西。:)

于 2012-04-06T13:43:03.060 回答