Russian Qt Forum
Ноябрь 24, 2024, 12:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QGraphicsView + QGraphicsScene  (Прочитано 2485 раз)
taifun
Гость
« : Март 14, 2012, 13:08 »

Добрый день!
Проблема вот в чем:  объекту класса QGraphicsScene в цикле добовляю ряд эллипсов через секунду и хочу, что бы они отображались в экземпляре класса QGraphicsView по мере добавления в QGraphicsScene.

В чем проблема и где почитать?
М. Шлее, http://doc.crossplatform.ru/qt/4.5.0/graphicsview.html почитал (может плохо читал?)

Код
C++ (Qt)
MainWindow::MainWindow(QWidget *parent) :
   QMainWindow(parent),
   ui(new Ui::MainWindow)
{
   ui->setupUi(this);
 
   connect(ui->pb_start, SIGNAL(clicked()), this, SLOT(drawObject()));
 
   scene = new QGraphicsScene();
   ui->graphicsView->setScene(scene);
}
 
MainWindow::~MainWindow()
{
   delete ui;
}
 
void MainWindow::drawObject()
{
   unsigned short int stp_x = 0;
   unsigned short int stp_y = 0;
 
   for(int _object = 0; _object < 5; _object++){
       qDebug() << "Paint " << _object + 1 << " object";
       scene->addEllipse(stp_x + _object * 10, 10, 10, 10);
 
       //scene->update(stp_x + _object * 10, 10, 10, 10);
       //ui->graphicsView->update();
 
       sleep(1);
   }
 
}
 
Записан
V1KT0P
Гость
« Ответ #1 : Март 14, 2012, 13:11 »

Добрый день!
Проблема вот в чем:  объекту класса QGraphicsScene в цикле добовляю ряд эллипсов через секунду и хочу, что бы они отображались в экземпляре класса QGraphicsView по мере добавления в QGraphicsScene.

В чем проблема и где почитать?
М. Шлее, http://doc.crossplatform.ru/qt/4.5.0/graphicsview.html почитал (может плохо читал?)

Код
C++ (Qt)
MainWindow::MainWindow(QWidget *parent) :
   QMainWindow(parent),
   ui(new Ui::MainWindow)
{
   ui->setupUi(this);
 
   connect(ui->pb_start, SIGNAL(clicked()), this, SLOT(drawObject()));
 
   scene = new QGraphicsScene();
   ui->graphicsView->setScene(scene);
}
 
MainWindow::~MainWindow()
{
   delete ui;
}
 
void MainWindow::drawObject()
{
   unsigned short int stp_x = 0;
   unsigned short int stp_y = 0;
 
   for(int _object = 0; _object < 5; _object++){
       qDebug() << "Paint " << _object + 1 << " object";
       scene->addEllipse(stp_x + _object * 10, 10, 10, 10);
 
       //scene->update(stp_x + _object * 10, 10, 10, 10);
       //ui->graphicsView->update();
 
       sleep(1);
   }
 
}
 
Так ты же выполняешь функцию в главном потоке и пока она не завершится ничего отрисовываться не будет. Запускай таймер соединяй со слотом и в слоте добавляй эллипс. Как только будет добавлено достаточно эллипсов останавливай таймер.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.097 секунд. Запросов: 21.