我对 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()
函数,然后更正矩形坐标,但都没有奏效。任何帮助表示赞赏。