는 할 쉬운 방법은 없습니다.
이
#include<QStylePainter>
// ......
void LabelWidget::paintEvent(QPaintEvent* event) {
QStylePainter painter(this);
painter.rotate(90);
painter.drawText(0, 0, text());
}
이 스타일 시트에 의해 정의 된 특성을 가진 텍스트를 그릴 것입니다, 그러나 이것은 정렬 문제가 해결되지 않습니다
QStylePainter
는 스타일로 도움이 될 수 있습니다. 당신의
drawStaticText
코드를 사용
rotate(90)
이 어떤 일을 표시하지 않는 경우 텍스트가 왼쪽 상단 점을 중심으로 회전하고
rotate(90)
이 (
rotate(45)
을 시도 위젯에서 텍스트를 이동합니다 beacuse
, 그것은, 당신은 것입니다 텍스트의 일부가 위젯 밖에 있음을 알 수 있음). 간단한 해결책은 QPainter::translate을 사용하여 가운데로 이동하는 것입니다.
#include<QStylePainter>
// ......
void LabelWidget::paintEvent(QPaintEvent* event) {
QStylePainter painter(this);
// rotate at center
painter.translate(rect().center());
painter.rotate(90);
painter.translate(-rect().center());
painter.drawText(rect(), alignment(), text());
}
가 줄 바꿈과 같은 더 많은 기능을 지원하기 위해 : 여기
정렬을 지원하는 내 코드입니다
#include<QStylePainter>
#include<QTextOption>
// ......
void LabelWidget::paintEvent(QPaintEvent* event) {
QStylePainter painter(this);
// rotate at center
painter.translate(rect().center());
painter.rotate(90);
painter.translate(-rect().center());
QTextOption textOption;
textOption.setAlignment(alignment());
if (wordWrap()) {
textOption.setWrapMode(QTextOption::WordWrap);
} else {
textOption.setWrapMode(QTextOption::NoWrap);
}
painter.drawText(rect(), text(), textOption);
}
당신이 QLabel
의 기타 속성을 원하는 경우 더 많은 기능을 추가해야합니다 , 간단한 해결책이 없습니다.
추신 : QStaticText
을 사용하려면 멤버 변수로 지정하십시오.
QStaticText 클래스를 사용하면 텍스트 및 그 레이아웃이 거의 업데이트되지 않을 때 텍스트의 최적화 된 그리기가 가능합니다.
QStaticText 그것이 QPainter를 :: DrawText에 사용하여보다 더 효율적으로 인출 할 수 있도록 텍스트 그래서 의 블록에 대한 레이아웃 데이터를 캐싱하는 방법을 제공한다() 된 레이아웃 정보는 매 호출 을 계산한다.
해 주셔서 감사합니다. 스타일 시트가있는 부분은 완벽하게 작동했습니다. 불행히도 여전히 정렬을 설정할 수 없습니다. (왜 QStaticText를 사용해야하는지 이해하지 못합니다.) 귀하의 코드를 사용하면서 Label이 완전히 사라졌습니다. 그러나 나는 다른 생각으로이 문제를 풀 수 있었다. 방금 Label을 QGridLayout으로 옮겼습니다. 그리고 myLabel _-> setAlignment (Qt :: AlignBottom); 대신'mainLayout _-> addWidget (myLabel_, 1, 0, Qt :: AlignBottom)을 사용했습니다; - mainLayout_은 QGridLayout입니다. 내 문제를 해결했다. – Qohelet