티스토리 뷰




  *  다음 환경을 사용하였습니다.

     환경이 다를 경우, 일부 API가 동작하지 않을 수 있습니다.

     [OS: Ubuntu 14.04.1 LTS]

     [Qt Version: 5.4]   




QFontMetrics 클래스를 이용하면 된다.



단, 딱 정확한 크기를 구하기 때문에, margin값을 따로 주어야 한다.



int QFontMetix::width(QChar ch) const;

int QFontMetix::width(const QString &text, int len, int flags) const;

int QFontMetix::width(const QString &text, int len = -1) const;


  • 함수 이름: width
  • 함수 역할: 입력받은 글자의 Pixel 사이즈를 구한다.
  • 함수 설명: 각 글자의 logical width를 구하여 반환한다.
Bearings
  • 파라미터 : 
    1. QChar ch: 한 글자의 픽셀을 반환한다.
    2. QString text: 문자열의 픽셀을 반환한다.
    3. len : 사용할 문자열의 길이를 지정한다. 만약 음수 값이 입력될 경우, 전체 문자열의 픽셀을 반환한다.
    4. flags : 라이브러리내에 API는 존재하지만, 공식 레퍼런스에는 API 설명이 공개되어있지 않아 정확한 용도를 알 수 없다.


다음은 예제의 일부

QLabel testLabel("레이블 테스트입니다.");
QFontMetrix fontMetrics(testLabel.font());
const int horizontalMargin = 10;
int labelWidth = fontMetrics.width(testLabel.text()) + widthMargin;

testLabel.setFixedWidth(labelWidth);

Font: Ubuntu

Font Size: 11


상태로, "레이블 테스트입니다." 의 width 는 135가 나온다.

폰트의 크기가 바뀌거나, 사이즈가 바뀌면 width도 자동으로 계산되어 변경된다.



위의 경우는 텍스트의 크기에 따라 레이블의 크기를 변경시키는 것인데, 

반대로 Label의 크기에 따라 텍스트를 변경시킬 수 있다.


예를들면 위의 문자열의 가운데 ... 을 넣어서 "레이블...니다."로 변경할 수도 있다.



역시 QFontMetrix 클래스의 elidedText 라는 클래스를 이용하면 된다.

QString QFontMetrics::elidedText(const QString &text, Qt::TextElideMode mode, int width, int flags=0) const;


  • 함수 이름: elidedText
  • 함수 설명: 텍스트를 일정 길이 이하로 표현하여 되돌려준다. ... 을 찍는 위치는 mode가 결정한다.
  • 파라미터: 
    1. text : 라벨에 표현되는 텍스트
    2. mode : ...을 찍을 위치. 다음 4가지의 모드가 있다.
      1. Qt::ElideLeft : 텍스트의 시작 부분
      2. Qt::ElideRight : 텍스트의 끝 부분
      3. Qt::ElideMiddle : 텍스트의 중간 부분
      4. Qt::ElideNone : 하지 않는다.
    3. width : ElidedText로 만들 길이 (보통 위젯의 크기가 된다.)
    4. flags : 레퍼런스에 정확한 용도가 명시되어 있지 않다.


다음은 예제의 일부이다.

QLabel testLabel("레이블 테스트입니다.");
testLabel.setFixedWidth(100);
QFontMetrix fontMetrics(testLabel.font());
QString strElidedText = fontMetrics.elidedText(
                                 testLabel.text(),
                                 Qt::ElideMiddle,
                                 testLabel.width());

testLabel.setText(strElidedText);



참고

  1. Qt 공식 레퍼런스 : http://doc.qt.io/qt-5/qfontmetrics.html




  *  다음 환경을 사용하였습니다.

     환경이 다를 경우, 일부 API가 동작하지 않을 수 있습니다.

     [OS: Ubuntu 14.04.1 LTS]

     [Qt Version: 5.4]   




'C, C++ > Qt Framework' 카테고리의 다른 글

Qt 날짜관련 함수 정리  (1) 2016.01.28
[Qt] QString의 문자열 처리  (1) 2015.06.14

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함