QRubberBand,如何在上面画画

Posted

技术标签:

【中文标题】QRubberBand,如何在上面画画【英文标题】:QRubberBand, how to draw on it 【发布时间】:2014-11-25 19:49:42 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

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

cpp:

#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()));
    

结果:

选择最适合您的方法。

【讨论】:

有没有机会在橡皮筋的右边看到这个数字?不是右下角? @Shepherd 代替 20,20 使用例如橡皮筋的中心,它是简单的绘图,您可以在小部件上的任何位置绘制此文本。

以上是关于QRubberBand,如何在上面画画的主要内容,如果未能解决你的问题,请参考以下文章

GUI学习之二十二——QRubberBand学习总结

如何在绢布扇子上画画

强制QRubberBand具有特定的宽高比

在iphone上画画

QGraphicsScene 中 Qrubberband 的错误渲染

请问如何 在MFC,用最简单的方法画出两点一线?而且要持续显示~~