[英]Vertical QLabel, or the equivalent?
我想要我正在繪制的圖的軸標簽,並且自然地,y軸標簽應垂直放置。 我很確定QwtPlot
做到這一點,但是我想讓事情保持輕巧,所以我現在僅使用一個簡單的QWidget
+ QPainter
。 在文檔中沒有看到任何更改QLabel
方向的方法。 在此2002線程中提供了一些解決方案,但我想要一些看起來像這樣的技巧。 我現在正在使用Qt 4.8,除了QPainter::drawText()
之外,真的沒有其他方法可以做到這一點嗎?
嘗試使用此:
#ifndef VERTICALLABEL_H
#define VERTICALLABEL_H
#include <QLabel>
class VerticalLabel : public QLabel
{
Q_OBJECT
public:
explicit VerticalLabel(QWidget *parent=0);
explicit VerticalLabel(const QString &text, QWidget *parent=0);
protected:
void paintEvent(QPaintEvent*);
QSize sizeHint() const ;
QSize minimumSizeHint() const;
};
#endif // VERTICALLABEL_H
/// cpp
#include "verticallabel.h"
#include <QPainter>
VerticalLabel::VerticalLabel(QWidget *parent)
: QLabel(parent)
{
}
VerticalLabel::VerticalLabel(const QString &text, QWidget *parent)
: QLabel(text, parent)
{
}
void VerticalLabel::paintEvent(QPaintEvent*)
{
QPainter painter(this);
painter.setPen(Qt::black);
painter.setBrush(Qt::Dense1Pattern);
painter.rotate(90);
painter.drawText(0,0, text());
}
QSize VerticalLabel::minimumSizeHint() const
{
QSize s = QLabel::minimumSizeHint();
return QSize(s.height(), s.width());
}
QSize VerticalLabel::sizeHint() const
{
QSize s = QLabel::sizeHint();
return QSize(s.height(), s.width());
}
因此,實際上我確實放棄了尋找任何簡單的方法來實現這一目標,而在Uwe Rathmann的Qwt代碼中,他的確在他的QwtPainter::drawText
包裝函數中使用了QPainter::drawText()
,並在QTransform
使用了QTransform
來實現旋轉QwtScaleDraw::labelTransformation
。 因此,我將它們匯總如下:
void LabelWidget::paintEvent(QPaintEvent*)
{
QPainter painter(this);
painter.setPen(Qt::black);
//... Need an appropriate call to painter.translate() for this to work properly
painter.rotate(90);
painter.drawText(QPoint(0,0), _text);
}
事實證明,不需要QPixmap。
這是Mostafa實現的一種變體。
void VerticalLabel::paintEvent(QPaintEvent*)
{
QPainter painter(this);
// painter.translate(sizeHint().width(),0);
// painter.rotate(90);
painter.translate(0,sizeHint().height());
painter.rotate(270);
painter.drawText(QRect (QPoint(0,0),QLabel::sizeHint()),Qt::AlignCenter,text());
}
基本上我已經刪除了setPen和setBrush來保留樣式表,並且我使用了drawText的重載,該重載使用rect而不是point。 這允許在文本內使用'\\ n'或將WordWrap用作標志。
QLabel
沒有方便的功能來做您想要的,不。 所以:
使用QGraphicsView
,它允許您QGraphicsView
轉換項目。
使用QPainter
。 可能最簡單的方法是將旋轉后的文本繪制到QPixmap
,然后將其設置在QLabel
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.