【发布时间】:2014-08-16 07:52:19
【问题描述】:
我正在使用图形视图在其中绘制图形项。早些时候,当我单击按钮时,相应的项目只绘制了一次,再次绘制相同的实体,我再次按下按钮。为了克服这个问题,我构建了信号以允许多次添加实体而无需再次按下按钮。但是当我使用向量来存储点时。它不会附加,将其容量限制为 2。以下是我的输出和代码 圆.cpp
void circle::mousePressEvent(QGraphicsSceneMouseEvent *e)
{
if(e->button()==Qt::LeftButton) {
if(mFirstClick){
x1 = e->pos().x();
y1 = e->pos().y();
mFirstClick = false;
mSecondClick = true;
}
else if(!mFirstClick && mSecondClick){
x2 = e->pos().x();
y2 = e->pos().y();
mPaintFlag = true;
mSecondClick = false;
update();
emit DrawFinished();
_store.set_point(e->pos());
store_point.push_back(_store);
qDebug() << _store.getValue();
qDebug() << "Size of vector =" << store_point.size() << "and" << store_point.capacity();
update();
}
}
主窗口.cpp
void MainWindow::drawCircle(){
item2 = new circle;
scene->addItem(item2);
qDebug() << "Circle Created";
connect(item2, SIGNAL(DrawFinished()), this, SLOT(drawCircle()));
}
输出
Circle Created
QPointF(60, 87)
Size of vector = 1 and 1
Circle Created
QPointF(77, 221)
Size of vector = 2 and 2
QPointF(333, 57)
Size of vector = 1 and 1
当我删除信号 DrawFinished() 时,点会完美存储,但项目只会被绘制一次。我需要再次按下按钮:(。以下是移除信号后的输出。
QPointF(74, 80)
Size of vector = 1 and 1
QPointF(118, 165)
Size of vector = 2 and 2
QPointF(335, 97)
Size of vector = 3 and 4
需要做什么才能完美地存储点并允许重新绘制。请帮我解决这一切。
【问题讨论】:
-
嗨!我不明白你为什么在代码中写一些布尔值
mFirstClick和mSecondClick,并在标题中写下“多次添加实体而无需再次按下按钮”。你真正想要的是什么 ?单击一次,添加几个形状,再次单击停止? -
我希望当我按下圆圈按钮时,我可以多次跟踪绘制圆圈的点。通常,当我按下按钮时,圆圈会被跟踪一次。我只能画一次。当我不得不再次绘制圆圈时,我不得不再次单击该按钮。为了克服这个问题,我使用了 DrawFinished。我想要同样的,但使用这种方法我无法处理使用向量的存储。
-
好的,正如你所问的需要 Firstclick 并且一旦我发现是的我并不真正需要它时都会考虑一下。我用它来思考当用户点击第一点和第二点然后它应该绘画。我删除了它,如果我不使用 DrawFinished 存储是完美的。它已更新,但之前绘制的圆圈消失了。使用 drawFinished 提供与之前相同的问题。
-
需要做什么?