我有一个不同宽度的框和一个自动换行的文本。每次用户更改框的宽度时,我都需要设置新的高度。该框由 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?