Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QPixmap и сохранение !
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Система рисования. Печать
maxvanceffer
Вообщем проблема такая:
Пишу прогу которая делает скрин рабочего стола и отсылает на сервер. Во общем при сохранение QPixmap подвисает вообще винда (причём подвисание только под виндой, под кубунтой всё нормально). Уже про бывал переносить в отдельный поток на время, скачивал исходники других программ и делают так же как и я.

Структура проги такая : Сначала создаётся главный класс потом этот класс создаёт класс который делает скрин и сохраняет. Главный класс и и класс скриншоты соединены слотами(Если это как то объяснит ситуацию).
А вот код который при выполнение тормозит систему.
        qDebug()<<"Running grabDisplay() function";
        Screen = QPixmap::grabWindow(QApplication::desktop()->winId());
        displayScreenName=savePath+G.currentTime().toString("hh-mm-ss")+".png";
        qDebug()<<"Path to be saved image from shootup"<<displayScreenName;
        if(Screen.save(displayScreenName,"png",60)) emit ScreenIsMaded(); // Вот на этой строчке система капитально подвисает на секунду.
        else emit errorScreen();


Использую Qt 4.6 beta1
kwisp
maxvanceffer,
у меня как то была проблема по виндой с "png" помогло использование "PNG". правда не помню какая версия.
ScreenIsMaded() этот сигнал с чем связан и каким типом соединения?

П.С.
подвисание на секудну так заметно?
maxvanceffer
В родительском классе есть слот getGrabedImagePath(); он соединён с сигналом ScreenIsMaded();
И подвисание реально ощутимо хоть и длиться примерно секунду. Про бывал на всех виндовозных компах в офисе. Есть это торможение.
kwisp
Цитата(maxvanceffer @ 26.10.2009, 17:23) *
В родительском классе есть слот getGrabedImagePath()

очень хорошо, а код этого слота?
и как соединён на прямую или через очередь?

maxvanceffer
Родительский класс DialogWindow.
Чайлд класс ScreenShooter;

В родительском классе :
myShooter=new ScreenShooter;
connect(myShooter,SIGNAL(ScreenIsMaded()),this,SLOT(getGrabedImagePath()));
kwisp
maxvanceffer,
код слота getGrabedImagePath покажи!
что делает это слот?
maxvanceffer
   if(myUser->settingsGetPopUpShowState()){
         qDebug()<<"In pop up will be this image path "<<myShooter->getDisplayImagePath();
        toolTip->ImageToShow(myShooter->getDisplayImagePath());
    }

    if(myUser->settingsWebCam()){
        myLastScreenWindow->setLastScreenPath(myShooter->getDisplayImagePath());
        myLastScreenWindow->setLastWebScreenPath(myShooter->getWebCameraImagePath());
    }else{
        myLastScreenWindow->setLastScreenPath(myShooter->getDisplayImagePath());
        myLastScreenWindow->setLastWebScreenPath("None");
    }
    grabSendingInfo();
    uploadScreenShot();

Функция grabSendingInfo(); собирает инфу о системе (версия винды, дату, время, имя пользователя)
kwisp
думаю здесь и нужно искать тормоз.
maxvanceffer
Пробывал тут искать.
Каментировал каждую сторчку по очереди. Методом исключения привело именно к QPixmap::save();
rnd
Запустите под профайлером
kwisp
смотри исходник save
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.