2017-05-23 132 views
1

QTextEditオブジェクトのサイズを調整して、テキスト文字列が指定されたジオメトリより大きい場合に自動的にサイズを変更する方法を教えてください。Qt:QTextEditオブジェクトのサイズを自動的に調整する方法

私の例では、QTextEditボックスのジオメトリを100x100に定義します。しかし、私が表示したいテキスト文字列はそれよりはるかに大きくなる可能性があります。

void MainWindow::display_text() 
{ 
    QTextEdit *text = new QTextEdit(this); 
    text->setWordWrapMode(QTextOption::NoWrap); 
    text->setFontPointSize(24); 

    /* Set the text box to be 100x100 */ 
    text->setGeometry(1, 1, 100, 100); 

    /* The destination field may be too large to fit in the text box */ 
    QString arg = QString("Destination: %1").arg(destination); 
    text->append(arg); 

    text->show(); 
} 

テキスト文字列が表示される(つまりスクロールしない)ようにしたいと思います。

+1

1行または複数行のテキストになりますか?また、入力中やプログラムでテキストを挿入するときに展開しますか? –

+0

各追加は、必要に応じてウィンドウの全幅に伸びる単一の線でなければなりません。また、1行に複数の追加があります。しかし、私はどれだけの総ラインを持つか知っているので、y軸のジオメトリを計算することは厳密には必要ではありません。また、テキストはプログラムによって入力されます。私はユーザー入力を必要としません。 –

答えて

0

QFontMetricsを使用して計算できます。

QFontMetrics fm(text->font()); 
QString myText = text->toPlainText(); 
int calcWidth = fm.width(myText); 
int calcHeight = fm.height(myText); 

その時点で、これらの値を使用して、好きな次元にジオメトリを設定できます。

text->setGeometry(1, 1, calcWidth, calcHeight);//Or whatever calculations you want 

信号のサイズを変更するには、信号とスロットを使用して、そのコードをもう一度呼び出します。 QTextEditには、textChangedという素晴らしい信号があります。

+0

この解決策は幅を見つけるのに役立ちますが、高さ(?!)はコンパイルされません。私は 'エラー:QFontMetrics :: height(QString&)'への呼び出しに対応する関数がありません。 –

+0

また、fmはsetFontPointSize(24)を考慮していないようです。返されるピクセルサイズは、必要なサイズよりも大幅に小さくなります。しかし、フォントサイズを10で割った値をピクセルに乗算すると、かなり近づいてきます。したがって、calcWidth *(24/10)になります。 –

関連する問題