【发布时间】:2021-02-15 11:28:16
【问题描述】:
我在制作 Windows Paint 之类的应用时遇到了问题。我想在按住鼠标按钮的同时在我的窗口上绘图。我知道有 MouseMoveEvent 但它对我来说刷新率真的很差。因此,我想创建自己的活动。我尝试了一些选项,至于现在我有类似的东西:
DrawArea::DrawArea(QObject *parent) : QGraphicsScene(parent), buttonPressed(false)
{
mouseEv = new QGraphicsSceneMouseEvent(QEvent::MouseMove);
timer = new QTimer(this);
timer->setInterval(60);
connect(timer, &QTimer::timeout, [=](){ mousePressEvent(mouseEv); });
}
void DrawArea::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
QPointF pos = event->scenePos();
qDebug() << pos;
auto radius = qreal(2);
auto* ellipse = this->addEllipse(QRect(pos.x()-radius, pos.y()-radius, 2*radius, 2*radius));
ellipse->setBrush(QBrush(QColor(Qt::black),Qt::SolidPattern));
buttonPressed = true;
//connect(timer, &QTimer::timeout, [=](){ updateDraw(event->scenePos()); });
timer->start();
event->accept();
}
但问题是当我按住鼠标按钮时,“pos”变量等于 (0,0)。只要我只用鼠标按钮点击,Pos 就是正确的。
在我也尝试过这样的事情之前:
DrawArea::DrawArea(QObject *parent) : QGraphicsScene(parent), buttonPressed(false)
{
mouseEv = new QGraphicsSceneMouseEvent(QEvent::MouseMove);
timer = new QTimer(this);
timer->setInterval(60);
}
void DrawArea::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
if(event->button() & Qt::LeftButton)
{
QPointF pos = event->scenePos();
qDebug() << pos;
auto radius = qreal(2);
auto* ellipse = this->addEllipse(QRect(pos.x()-radius, pos.y()-radius, 2*radius, 2*radius));
ellipse->setBrush(QBrush(QColor(Qt::black),Qt::SolidPattern));
buttonPressed = true;
connect(timer, &QTimer::timeout, [=](){ updateDraw(event->scenePos()); });
timer->start();
}
else event->ignore();
}
void DrawArea::updateDraw(QPointF mousePos)
{
mouseEv = new QMouseEvent(QEvent::MouseMove, mousePos, Qt::NoButton, Qt::LeftButton, Qt::NoModifier);
mouseMoveEv(mouseEv);
}
void DrawArea::mouseMoveEv(QMouseEvent *event)
{
QPointF pos = event->pos();
qDebug() << pos;
auto radius = qreal(20);
auto* ellipse = this->addEllipse(QRect(pos.x()-radius, pos.y()-radius, 2*radius, 2*radius));
ellipse->setBrush(QBrush(QColor(Qt::black),Qt::SolidPattern));
event->accept();
}
但这仍然无法正常工作。我对 Qt 很陌生,特别是在 Qt Graphics View 框架中,所以我希望(我希望)我正在做一些愚蠢的事情。如果有任何帮助,我将不胜感激。
【问题讨论】:
-
我知道有 MouseMoveEvent,但它的刷新率对我来说真的很差你有没有在发布模式下测试过你的代码。
-
不要自己生成事件。相反,对系统生成的事件做出反应。
-
@drescherjm 开玩笑,我已经在发布模式下测试过了。
标签: c++ qt qgraphicsview