0

さまざまな幅のボックスとワードラップされたテキストがあります。ユーザーがボックスの幅を変更するたびに、新しい高さを設定する必要があります。ボックスは、paintEvent(QPaintEvent *)関数内の QPainter によって表示されます。現在の例など、いくつかの解決策があります(あまりスマートではありません。これは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! :)

しかし、コードはやり過ぎ
です。
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 に答える