화면에 인쇄 할 문자열을 만들고 싶습니다. 인쇄 된 변수의 값이 변경 될 때마다이 문자열을 업데이트합니다. 각 숫자의 자릿수는 다를 수 있으며 각 숫자의 부호는 시간에 따라 변경 될 수 있습니다. 내가 일정하고 싶은 것은 숫자의 정밀도입니다. 내가 기대하는 출력은 다음과 같이 sth입니다 (각 줄은 동일한 문자열에 해당하며 업데이트 만 있음).
X: 453.432 Y: 543.432
X: -5.432 Y: 4.432
X: 43.234 Y: -123.423
즉, 글자와 점은 항상 화면에서 같은 위치에 있어야합니다.
현재이 코드를 문자열 업데이트에 사용하지만 자릿수가 변경되면 Y와 점의 위치가 달라집니다. 그것을 구현하는 간단한 방법이 있습니까?
text = QString("X: %1 Y: %2").arg( QString::number( x(), 'f', 3 ),
QString::number( y(), 'f', 3 ) );
------------------ 편집하다 ------------------
대답에 따라 일정한 간격으로 문자열을 만들었습니다 (실제로 일정한 길이). 그래도 내 문제를 완전히 해결하지는 못했습니다.
다음 단계에서는 문자열 text
을 사용하여 개체에 QPainter
페인트 QImage
합니다. 여기서 만나는 문제는 문자열 길이가 항상 같더라도 숫자의 너비가으로 그린 공백 ( '') 및 '-'기호의 너비와 다르다는 것 QPainter
입니다. 따라서 자릿수가 변경되면 점의 위치가 바뀌고 'Y'기호도 변경됩니다.
이미지 생성에 사용하는 코드는 다음과 같습니다.
QImage img( 100, 100, QImage::Format_ARGB32_Premultiplied );
img.fill( Qt::transparent );
QPainter painter( &img );
QPen pen;
pen.setColor( Qt::darkBlue );
painter.setPen(pen);
QFont font = painter.font();
font.setBold( true );
font.setPointSize( 10 );
painter.setFont( font );
QString text = QString("X:%1 Y:%2")
.arg( x(), 9, 'f', 3, ' ' )
.arg( y(), 9, 'f', 3, ' ' );
painter.drawText( QPointF(0, 50), text );
painter.end();
arg
메서드 의이 서명을 사용할 수 있습니다 .
// arg(double a, int fieldWidth, char format, int precision, QChar fillChar)
QString formated = QString("X:%1 Y:%2")
.arg(x(), 9, 'f', 3, ' ')
.arg(y(), 9, 'f', 3, ' ');
두 번째 문제는 글꼴 모음을 변경하여 해결합니다.
font.setFamily("Courier");
내 결과는 다음과 같습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다