2017-12-30 71 views
1

私はthis問題と同様の問題を持っていますが、その答えは私のためにうまく機能しません。コンテンツへのQLineEditの幅を調整する(と予想より短くなって)

QLineEdit要素に短いテキストが含まれています。この要素をコンテンツの幅に合わせて調整すると、テキストが余白や隠し文字なしで要素に収まるようになります。私はそのためQFontMetricsを使用しますが、シフトのビットがあるかのように右のスペースのビットがある一方で、左端の文字は、部分的に隠されているように、結果は、次のとおりです。

QLineEdit too short

私のコードがあります次のようになります。

#include <QtWidgets> 

int main (int argc, char** argv) { 
    QApplication app (argc, argv); 
    QLineEdit *lineEdit = new QLineEdit; 

    QString text = "Hello, world!"; 
    lineEdit->setText(text); 
    QFontMetrics fm = lineEdit->fontMetrics(); 
    int w = fm.boundingRect(text).width(); 
    // int w = fm.width(text); 
    lineEdit->setFixedWidth(w); 
    lineEdit->show(); 

    return app.exec(); 
} 

setAlignmentで遊んでも違いはありません。

+0

これはバグのようですが、少しずれています: 'int w = fm.width(text +" | ");' – eyllanesc

答えて

0

QFontMetricsは、ウィジェットのスタイルに依存するフレーム(ここでは3D効果を提供する部分)を考慮に入れていません。一般的な解決のためには、ウィジェットのタイプに応じて、フレームのための追加のマージンをQStyle::PixelMetric掘り下げると照会する必要があります。時々、あなたは左と右/上部と下部のフレームのために、値を倍にする持っていることに注意してください。

簡単な解決策ではあるが、スタイルよりも移植性が高くない(プラットフォームに依存しない)ので、試用版&エラーで使用するスタイルに一定のマージンを見つけて、これを幅に追加することです。例:

関連する問題