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

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

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

【问题讨论】:

    标签: c++ qt draw rubber qrubberband


    【解决方案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 使用例如橡皮筋的中心,它是简单的绘图,您可以在小部件上的任何位置绘制此文本。
    猜你喜欢
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 2020-10-10
    相关资源
    最近更新 更多