[Qt-interest] MainWindow::paintEvent() constantly called
Oliver Demetz
forenbeitraege at oliverdemetz.de
Fri Jun 19 09:07:47 CEST 2009
Hi Mike,
I followed your thread, and was interested in the "webcam-part" of it.
Did you write the webcam interface yourself, or is it a library you're
using? Especially, I am searching for a portable implementation that
works on various platforms.
Regards,
Oliver
Alexandre Courbot schrieb:
>> The painEvent() is called constantly, if I don't prevent it.
>> The side effects are that the image on screen is constantly updated and the
>> CPU is overworked. This is not what I want.
>> I want an image update every 1 or two seconds.
>>
>> void MainWindow::Setup()
>> {
>> pView = ui->ViewLable;
>> pCamera = new CCamera(CSize(CameraImageWidth, CameraImageHeight));
>> pQImage = NULL;
>> GrabTimer = new QTimer(this);
>> connect(GrabTimer, SIGNAL(timeout()), this, SLOT(update()));
>> GrabTimer->start(2000);
>> }
>>
>> // If I don't do the "Doneit" nonsense, this function will be called
>> repeatedly, immediately after it exits.
>> //
>> // If I disable the timer and remove the "Doneit" code
>> // the ViewLable ('pView' as it's called here) is constantly updated with
>> camera output
>> // i.e. there is a constant flow of live frames to the ViewLable
>>
>> void MainWindow::paintEvent(QPaintEvent *) // how do I use QPaintEvent?
>> {
>> static bool Doneit = false;
>>
>> if(!Doneit)
>> {
>> if(pCamera->IsValid())
>> {
>> MyImage *p = pCamera->GetImage();
>> delete pQImage;
>> pQImage = new QImage(p->GetPixelAddress(0, 0), p->GetWidth(),
>> p->GetHeight(), QImage::Format_RGB888);
>> QPixmap newPixMap = QPixmap::fromImage(*pQImage);
>> pView->setScaledContents(true);
>> pView->setPixmap(newPixMap);
>> Doneit = true;
>> }
>> }
>> else
>> Doneit = false;
>> }
>
> I guess your problem is that you trigger a paint event by yourself
> within the paintEvent method. I'm not exactly sure what's wrong
> though. What happens if you comment the setPixmap call out in
> paintEvent? (not sure about it, but maybe that method calls update()
> on its parent to schedule another paint event?)
>
> Maybe a cleaner way to do that would be to have a custom slot called
> by the timer (instead of update()) and to do everything in that slot.
> You GUI will then be updated appropriately. In any case, you should
> try to avoid overloading paintEvent as much as possible since it's the
> best way to have this kind of problems.
>
>> I just realized that I hit reply to your email and sent it to your gmail. Should
>> I have sent it to qt-interest at trolltech.com?
>
> Actually, yes. Please use "reply to all" for mailing-list messages.
>
>> Sorry, first time user.
>
> No problem, you're welcome.
>
> Alex.
>
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at trolltech.com
> http://lists.trolltech.com/mailman/listinfo/qt-interest
More information about the Qt-interest-old
mailing list