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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Мигание!!!!  (Прочитано 1771 раз)
Garik
Гость
« : Апрель 15, 2011, 19:01 »

Всеп Привет!!!
Помогите решить задачу!!! заключаеться в следуещем,,, Есть MainWindow в него накиданы по стандарту ЦентралВинджет, доквиджет, тулбарс...
Теперь загружаю изображение, в централВиджет, и при помощи несложных вычыслений нахожу координаты окружностей на изображении.
Далее собственно вопрос: - Теперь когда координаты окружностей на картинке найдены надо их выделеть, например кругом (или елепсом, не имеет впрочем разницы) и что-бы это выдиление например в виде елепса МИГАЛО.
Пошел по пути, мигание - это таймеры, а рисование - QPaint, как-бы с таймером розобрался. Алгоритм таков: -  Произвел вычисление---получил координаты окружностей---запустил (единожды) первый тамймер1---заскочил в слот обработки первго таймера и прорисовал елипс с данными координатами и запустил (единожды) таймер2---далее в слот обработки таймера2 и перерисовал елипс (поменять цвет например или размеры) далее запустил таймер1..... и так далее, думаю должен получится этакий ефект мигания!!!!
Помогите разобраться собственно с QPaint а то че-то ничего не ресует, ну и как вам такой подход по таймерам не слишком наивный и безобразный, может как - то можна такую процедуру инным путем?Непонимающий
Вот сам код!!!!!
Код:

ImageViewer::ImageViewer()
{
      imageLabel = new QLabel;
      imageLabel->setBackgroundRole(QPalette::Base);
      imageLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
      imageLabel->setScaledContents(true);

      scrollArea = new QScrollArea;
      scrollArea->setBackgroundRole(QPalette::Dark);
      scrollArea->setWidget(imageLabel);
      setCentralWidget(scrollArea);

      timer1 = new QTimer(this);
      connect(timer1, SIGNAL(timeout()), this, SLOT(do_timer1()));

      timer2 = new QTimer(this);
      connect(timer2, SIGNAL(timeout()), this, SLOT(do_timer2()));

    TreeWidget();
    createActions();
    createMenus();
    setWindowTitle(tr("Image Viewer"));
    resize(500, 400);
}

void ImageViewer::open()  // непосредственно загрузка картинки
{
    QString fileName = QFileDialog::getOpenFileName(this,tr("Open File"), QDir::currentPath());
    if (!fileName.isEmpty()) {
        QImage image(fileName);
        if (image.isNull()) {
            QMessageBox::information(this, tr("Image Viewer"), tr("Cannot load %1.").arg(fileName));
            return;
        }
        imageLabel->setPixmap(QPixmap::fromImage(image));

        scaleFactor = 1.0;

        printAct->setEnabled(true);
        fitToWindowAct->setEnabled(true);
        updateActions();

        if (!fitToWindowAct->isChecked())
            imageLabel->adjustSize();
    }
}

void ImageViewer::find_circle_on_image() //теперь сам алгоритм где получаю координаты
{
// ....
.......
 ...  //
timer1->setSingleShot(true);
timer1->start(1000);
}

void ImageViewer::do_timer1()
{
      QPainter painter(&image);
     QRect rect(Contors.center.x, Contors.center.y, 80, 60);
     painter.drawRect(rect);
     painter.end();

     qDebug() << "test - Timer1 work:";
     timer2->setSingleShot(true);
     timer2->start(1000);
}

void ImageViewer::do_timer2()
{
     QPainter painter(&image);
     QRect rect(Contors.center.x, Contors.center.y, 100, 80);
     painter.drawRect(rect);
     painter.end();

     qDebug() << "test - Timer2 work:";
     timer1->setSingleShot(true);
     timer1->start(1000);
}

 

Заранее спасибо Господа!!!!!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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