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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QGraphicsScene и большой png-шный файл с прозрачность.  (Прочитано 3365 раз)
Smogg
Гость
« : Февраль 24, 2016, 22:42 »

Может кто сталкивался... Или намекнет, куда копать или как вывернутся и этот баг обойти стороной.

Когда добавляю большую картинку с целиком прозрачную, но с редкими черными пикселями, то при ПЕРВОЙ попытке ручного скролла, т.е. при dragMode == ScrollHandDrag прога уходит в глубокий завис. Но, что интересно, таки возвращается. После этого первого зависания картинку можно весьма бодро таскать и мышкой, как и положено. При этом, скроллбары работают прекрасно.

Скроллбарами можно двигать всегда, а мышкой - лишь после зависа....

При чем "большевитость" картинки весьма условная - 1700х1000. Примерно такая:

Записан
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #1 : Февраль 25, 2016, 12:12 »

Не испытывал тормозов при работе с прозрачными картинками.
Пройдитесь по своему коду отладчиком, найдите место где зависает. Или профайлером.
Гадать можно бесконечно.
Записан
Smogg
Гость
« Ответ #2 : Февраль 25, 2016, 12:51 »

Нечего в коде отлаживать) Минимальная формочка со сценой, кнопкой и одиноким обработчиком:
Код:
void BigQGraphicsScene::on_pushButton_clicked()
{
    QString s = "d:/!Qt/ImageNumber/BigQGraphicsScene/TestPic/fastole_bdr.png";

    if (s.length())
    {
        imgOrig.load(s);      
qDebug() << imgOrig;

  QGraphicsPixmapItem *itm = new QGraphicsPixmapItem();

  itm->setPixmap(QPixmap::fromImage(imgOrig));
 
   ui.graphicsView->scene()->setItemIndexMethod(QGraphicsScene::NoIndex);
  ui.graphicsView->scene()->addItem(itm);

  ui.graphicsView->scene()->setSceneRect( imgOrig.rect() );
    }

}

Хотя и заявляется, что   scene()->setItemIndexMethod(QGraphicsScene::NoIndex) делает отмену индексирования... Но видимо я не понимаю, что под этим термином "индексирование" здесь имеется ввиду.

Завис же стартует при первом клике в сцену. Потом отвисает обратно и нормально бегает.
« Последнее редактирование: Февраль 25, 2016, 12:55 от Smogg » Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #3 : Февраль 26, 2016, 10:38 »

а без прозрачности тормозов нет ? (код не запускал)
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Февраль 26, 2016, 11:02 »

Завис же стартует при первом клике в сцену. Потом отвисает обратно и нормально бегает.
После клика переключитесь в отладчик и там нажмите "останов", дальше смотрите стек. Если зависон хороший, времени нажать хватит 
Записан
Smogg
Гость
« Ответ #5 : Февраль 27, 2016, 04:24 »

Тормоза не в моем коде, а где-то в кишка QtWidget.dll. С прозрачностью начинается расчет, какие пиксели относятся к итему, а какие нет, чтоб селект обрабатывать, ведь через прозрачные места протыкивается, а через полупрозрачные - уже нет. Я так понял. Потому что при добавлении чуть-чуть альфы, картинка хоть и остается для юзера прозрачной, но Qt'y она становится большим прямоугольником, что обрабатывается мгновенно.

Кароч, отказался от отдельного итема с границами) Все равно показ границ объектов без самих обектов смысла не имеет.



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


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