首页 > 解决方案 > qRubberBand 在某些情况下不连续绘制

问题描述

我对 qRubberBand 在某些情况下不绘制连续矩形有疑问。我使用了 Qt 文档中的确切示例:

void Widget::mousePressEvent(QMouseEvent *event)
{
    origin = event->pos();
    if (!rubberBand)
        rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
    rubberBand->setGeometry(QRect(origin, QSize()));
    rubberBand->show();
}

void Widget::mouseMoveEvent(QMouseEvent *event)
{
    rubberBand->setGeometry(QRect(origin, event->pos()).normalized());
}

void Widget::mouseReleaseEvent(QMouseEvent *event)
{
    rubberBand->hide();
}

我的问题显示在此视频中:

https://imgur.com/a/TMpUz0l

如您所见,如果我从左上到右下绘制矩形,则矩形会平滑绘制。但否则,这幅画就不是连续的。

以下是我的代码的一些事件:

void Graph::onMousePress(QMouseEvent* event){
    if ((event->buttons() & Qt::RightButton) == Qt::RightButton) {
        m_RMBPressed = true;
        m_globalOrigin = QPoint(event->globalPos().x(), event->globalPos().y());
        if (!m_rubberBand) {
            m_rubberBand = new QRubberBand(QRubberBand::Rectangle, qobject_cast<QWidget*>(this));
        }
        m_rubberBand->setGeometry(QRect(m_globalOrigin, QSize()));
        m_rubberBand->show();
    }
}

void Graph::onMouseRelease(QMouseEvent* event){
    m_RMBPressed = false;
    if (m_rubberBand) {
        m_rubberBand->hide();
    }
}

void Graph::onMouseMove(QMouseEvent* event){
    if (m_RMBPressed) {
        auto rectangle = QRect(QPoint(event->globalPos().x(), event->globalPos().y()), m_globalOrigin).normalized();
        m_rubberBand->setGeometry(rectangle);
        m_rubberBand->update();
    }
}

我试图交换 的坐标QRect,删除.normalized()函数,然后更正矩形坐标,但都没有奏效。任何帮助表示赞赏。

标签: qtqrubberband

解决方案


推荐阅读