qt QRubberBand实现区域选择。

QRubberBand比较简单,没啥好讲的,直接上示例。
.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QRubberBand>
#include <QMouseEvent>
#include <QCheckBox>


class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

protected:
    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
private:

    QRubberBand* m_rubberband;
    QPoint m_oldpoint;
    QPoint m_oldglobalpoint;
    QRect m_selectglobalrect;
    QRect m_selectrect;
    QList<QCheckBox*> m_boxList;
};
#endif // WIDGET_H

.cpp

#include "widget.h"
#include <QDebug>
#include <QGridLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{

    QGridLayout* lay = new QGridLayout();
    for (int i = 0; i < 10; ++i) {
        for (int j = 0; j < 4; ++j) {
            QCheckBox* box = new QCheckBox(QString::number((i+1)*j),this);
            box->setFixedSize(50,20);
            box->setStyleSheet("background:green");
            lay->addWidget(box,i,j);
            m_boxList.append(box);
        }
    }
    this->setLayout(lay);
    m_rubberband = new QRubberBand(QRubberBand::Rectangle);
}

Widget::~Widget()
{
}

void Widget::mousePressEvent(QMouseEvent *event)
{
    m_oldglobalpoint = event->globalPos(); //获取桌面坐标
    m_oldpoint = event->pos(); //获取当前窗口坐标
    m_rubberband->setGeometry(QRect(m_oldglobalpoint,m_oldglobalpoint));
    m_rubberband->show();
}

void Widget::mouseMoveEvent(QMouseEvent *event)
{
    m_selectglobalrect = QRect(m_oldglobalpoint,event->globalPos()); //获取相对桌面的选择区域
    m_selectrect = QRect(m_oldpoint,event->pos());  //获取相对当前窗口的界面
    m_rubberband->setGeometry(m_selectglobalrect.normalized());
}

void Widget::mouseReleaseEvent(QMouseEvent *event)
{
    m_rubberband->hide();
    //存在交叉则选中
    for (int i = 0; i < m_boxList.size(); ++i) {
        if (m_selectrect.intersects(m_boxList[i]->geometry()))
        {
            m_boxList[i]->setChecked(true);
        }
    }
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: QRubberBandQt 图形用户界面库中的一个类,它提供了一种方便的方法来在图形界面中显示橡皮筋效果。橡皮筋效果通常用于图形界面中的选择操作,例如用户在图像编辑器中选择一个区域或在文本编辑器中选择一段文本。QRubberBand 类提供了一组基本的方法来控制橡皮筋的形状、位置和外观,以及与之交互的方法。它还允许开发者自定义橡皮筋的外观,以适应特定的图形界面设计风格。 ### 回答2: QRubberBand是一个Qt框架中的类,用于在绘图或UI设计应用程序中实现一个矩形选择框。它能够在鼠标拖动期间绘制一个矩形,并可以调整选择框的大小和位置。 使用QRubberBand,开发者可以实现诸如选择多个图形对象或调整图形对象大小等功能。它通常与鼠标事件相结合使用,例如当鼠标按下时,开始绘制矩形选择框,并在鼠标释放时完成选择。在此过程中,我们可以使用QRubberBand的一些方法来获取或设置选择框的位置和大小,以便进行后续的操作。 QRubberBand类提供了几个构造函数,可以根据需要选择使用的样式和父组件。通过调用setGeometry()方法,可以设置选择框的起点位置和大小。而后,可以使用move()、resize()方法来动态修改选择框的位置和大小。 此外,QRubberBand还提供了几个便捷方法,如isVisible()、show()和hide()等,用于控制选择框的显示和隐藏。 总之,QRubberBand是一个非常实用的类,可用于在Qt应用程序中实现矩形选择框的功能。无论是用于图形操作还是用于UI设计,它都能提供方便快捷的矩形选择功能,并帮助我们实现更灵活、高效的交互体验。 ### 回答3: QRubberBand是一种用于绘制矩形选区的图形对象。在计算机应用程序中,我们经常需要通过鼠标拖动来选择或标记特定区域QRubberBand可以在应用程序窗口中创建一个可见的矩形框,以便用户可以选择感兴趣的区域。 用户可以通过在鼠标按下并拖动的过程中创建QRubberBand对象,然后在释放鼠标按钮后将其显示在应用程序窗口中。QRubberBand的颜色、样式和粗细等属性可以根据应用程序的需求进行设置和修改。 一旦创建了QRubberBand对象,用户可以使用其提供的功能来获取用户选择区域的坐标或大小。应用程序可以使用这些信息来执行特定的操作,例如截取选择区域的屏幕截图、将选择区域的图像保存到文件中,或者执行与选择区域相关的其他操作。 除了矩形选择区域外,QRubberBand还可以用于实现其他形状的选区,例如椭圆或多边形。它可以灵活地根据应用程序的需求进行定制和使用。 总而言之,QRubberBand是一种非常有用的图形对象,可以在应用程序中实现用户交互性的矩形或其他形状的选区功能,帮助用户选择感兴趣的区域并执行相关的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方忘忧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值