Update scene
-
@mrjj No, at the moment I'm trying to make smth like an Update func
void MainWindow::Shot(){
QGraphicsRectItem *Pos1;
Pos1=rectan[0];
QGraphicsRectItem *Pos2;
Pos2=rectan[1];
scene->removeItem(rectan.at(0));
scene->removeItem(rectan.at(1));rectan.at(0) = Pos2;
rectan.at(1) = Pos1;
scene->addItem(rectan.at(0));
scene->addItem(rectan.at(1));
} -
Hi
at returns const.
This looks strange to me
rectan.at(0) = Pos2;
maybe
rectan[0] = Pos2Also this will just swap the position in your list.
It will NOT change on screen.You need to use pos() and SetPos
Not just swap in you array. You swap pointers.
You should swap QPointF using pos and setPos; -
Hi
at returns const.
This looks strange to me
rectan.at(0) = Pos2;
maybe
rectan[0] = Pos2Also this will just swap the position in your list.
It will NOT change on screen.You need to use pos() and SetPos
Not just swap in you array. You swap pointers.
You should swap QPointF using pos and setPos;@mrjj I thought it will repaint the rects, because first I delete them and then I want to repaint them with new options
-
@mrjj I thought it will repaint the rects, because first I delete them and then I want to repaint them with new options
Yes I guess it will repaint them on scene.
But it matters not for scene if you swap your own array.
The items still have same location as before as you do not setPos
(from code shown) -
Yes I guess it will repaint them on scene.
But it matters not for scene if you swap your own array.
The items still have same location as before as you do not setPos
(from code shown)@mrjj and another one, I have a loop inside of a loop and when the second one finishes its iteration it won't singleshot on another iteration of the first loop
for (int =0;i<10;i++){
//and when i is 1 the second loop won't singleshot again
for(int j=0;j<9;j++){
SingleShot
}
} -
well
Normally it works as many times as u set it up but hard to guess at with
only "SingleShot". -
well
Normally it works as many times as u set it up but hard to guess at with
only "SingleShot". -
@mandruk1331 said:
Why do yo u give rectan.at(0) to constructor ?
new QGraphicsRectItem(rectan.at(0));Try
scene->addItem( new QGraphicsRectItem );
and tell if that not add a new item? -
@mandruk1331 said:
Why do yo u give rectan.at(0) to constructor ?
new QGraphicsRectItem(rectan.at(0));Try
scene->addItem( new QGraphicsRectItem );
and tell if that not add a new item?@mrjj Ok, I managed to swap positions of the rectangles, but they swap not always, at first execution they swap on the other they don't, what could be the problem??
void MainWindow::Shot(){
QPointF Pos1;
QPointF Pos2;
Pos1 = rectan.at(5)->pos();
Pos2 = rectan.at(6)->pos();rectan.at(6)->setBrush(Qt::blue);
rectan.at(5)->setBrush(Qt::green);
// rectan.at(5)->setBrush(Qt::blue);
rectan.at(6)->setPos(Pos1.rx()-30,Pos1.ry());
rectan.at(5)->setPos(Pos2.rx()+30,Pos2.ry());}
Solved it) -
hi
put qDebug() << "in shot:"
in the
MainWindow::Shot()
to make sure its actually called mutiple times. -
hi
put qDebug() << "in shot:"
in the
MainWindow::Shot()
to make sure its actually called mutiple times. -
if pos() returns 0,0 , it must mean the items is actually at 0,0.
-
@mrjj and the other ones return 0,0. The object are unique they are all parents and have no child, I want to get the positions of each object so I could move them
-
@mrjj and the other ones return 0,0. The object are unique they are all parents and have no child, I want to get the positions of each object so I could move them
@mandruk1331
Something is not right.
Unless they are all really drawn at 0,0 then pos() should return the
actual position.
Did you new a QGraphicsRectItem and inserted directly in the list? -
@mandruk1331
Something is not right.
Unless they are all really drawn at 0,0 then pos() should return the
actual position.
Did you new a QGraphicsRectItem and inserted directly in the list?@mrjj yes, and in the constructor I have set theirs poistions
-
@mrjj yes, and in the constructor I have set theirs poistions
Ok, then they should still have the pos, unless you swapped with a
item having 0,0. -
Can I ask how any values (rects) you try to visualize?
-
@mrjj 10
-
@mrjj 10
@mandruk1331
ok.
And did you write the sort also? -
@mandruk1331
ok.
And did you write the sort also?@mrjj yes
for( int i=0;i<random_numbers_.size()-1;i++){
for(int j=0;j<random_numbers_.size()-1;j++){if(random_numbers_[j]>random_numbers_[j+1]){ count++;
QTimer::singleShot(1000*count, [=]{ MainWindow::Shot(j);});
} } }