Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Smogg от Февраль 24, 2016, 22:42



Название: QGraphicsScene и большой png-шный файл с прозрачность.
Отправлено: Smogg от Февраль 24, 2016, 22:42
Может кто сталкивался... Или намекнет, куда копать или как вывернутся и этот баг обойти стороной.

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

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

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

(http://snorgg.ru/img/hhr.png)


Название: Re: QGraphicsScene и большой png-шный файл с прозрачность.
Отправлено: Swa от Февраль 25, 2016, 12:12
Не испытывал тормозов при работе с прозрачными картинками.
Пройдитесь по своему коду отладчиком, найдите место где зависает. Или профайлером.
Гадать можно бесконечно.


Название: Re: QGraphicsScene и большой png-шный файл с прозрачность.
Отправлено: Smogg от Февраль 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) делает отмену индексирования... Но видимо я не понимаю, что под этим термином "индексирование" здесь имеется ввиду.

Завис же стартует при первом клике в сцену. Потом отвисает обратно и нормально бегает.


Название: Re: QGraphicsScene и большой png-шный файл с прозрачность.
Отправлено: qate от Февраль 26, 2016, 10:38
а без прозрачности тормозов нет ? (код не запускал)


Название: Re: QGraphicsScene и большой png-шный файл с прозрачность.
Отправлено: Igors от Февраль 26, 2016, 11:02
Завис же стартует при первом клике в сцену. Потом отвисает обратно и нормально бегает.
После клика переключитесь в отладчик и там нажмите "останов", дальше смотрите стек. Если зависон хороший, времени нажать хватит 


Название: Re: QGraphicsScene и большой png-шный файл с прозрачность.
Отправлено: Smogg от Февраль 27, 2016, 04:24
Тормоза не в моем коде, а где-то в кишка QtWidget.dll. С прозрачностью начинается расчет, какие пиксели относятся к итему, а какие нет, чтоб селект обрабатывать, ведь через прозрачные места протыкивается, а через полупрозрачные - уже нет. Я так понял. Потому что при добавлении чуть-чуть альфы, картинка хоть и остается для юзера прозрачной, но Qt'y она становится большим прямоугольником, что обрабатывается мгновенно.

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