我正在尝试在 QRubberBand 对象上绘制数字。我有带有 QRubberBand 对象 rectangleRubberBand 的类小部件;

我可以显示这个区域等,但我试图在小部件上绘制区域 而不是 一些数字,例如该区域的宽度和高度。我怎样才能做到这一点?它用于图表的测量目的。

最佳答案

它不是在橡皮筋上画画,但它可以满足您的需求:

void MyButton::mouseMoveEvent(QMouseEvent *event)
{
    rubberBand->setGeometry(QRect(mypoint, event->pos()).normalized());//Area Bounding
    QToolTip::showText( event->globalPos(), QString("%1,%2")
                                             .arg(rubberBand->size().width())
                                             .arg(rubberBand->size().height()),this );
}
QToolTip 显示在光标附近。它动态变化并显示有关橡皮筋大小的实际信息。

结果(黑色区域为光标):

更难的解决方案:子类 QRubberBand 并重新实现 paintEvent 。例如:

标题:
#ifndef RUBBERBAND_H
#define RUBBERBAND_H

#include <QRubberBand>
#include <QPaintEvent>

class RubberBand : public QRubberBand
{
    Q_OBJECT
public:
    explicit RubberBand(Shape s, QWidget * p = 0);


signals:

protected:
    void paintEvent(QPaintEvent *event);

public slots:

};

#endif // RUBBERBAND_H

cp:
#include "rubberband.h"
#include <QPainter>
RubberBand::RubberBand(QRubberBand::Shape s, QWidget *p) :
    QRubberBand(s,p)
{
}

void RubberBand::paintEvent(QPaintEvent *event)
{
    QRubberBand::paintEvent(event);
    QPainter p(this);
    p.setPen(QPen(Qt::black,2));
    if(size().width() >10 && size().height() >10)
    {
        p.drawText(20,20,QString("%1,%2").arg(size().width()).arg(size().height()));
    }
}

结果:

选择最适合您的方法。

关于c++ - QrubberBand,如何在它上面画画,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27135424/

10-11 16:00