Название: QGraphicsView Отправлено: zagruzkaaa от Июль 08, 2015, 19:01 Требуется загрузить огромную картинку в QGraphicsView в виде блоков по 500-1000 пикселей, попробовал это сделать через QImageReader + setClipRect + read() + конвертирование из qimage в qpixmap , ну все работает, но работает ну ОЧЕНЬ долго, как это можно сделать быстрее? спасибо + еще вопрос как перегрузить wheelEvent, что бы после него выполнялись определенные действия, но только в том случае если он не вызывается повторно последние 5 сек
Название: Re: QGraphicsView Отправлено: Гурман от Июль 14, 2015, 23:47 как перегрузить wheelEvent, что бы после него выполнялись определенные действия, но только в том случае если он не вызывается повторно последние 5 сек это тривиально - достаточно в классе иметь QBasicTimer, который в начале wheelEvent проверяется на isActive(), и если true, то stop() этому таймеру, а в конце wheelEvent этот таймер запускается на 5 секунд и ему передается this этого объекта, и в этом же объекте надо переопределить метод timerEvent, в котором делать "определенные действия" при получении события о срабатывании таймера - подробности в описании QBasicTimer и множестве примеров увы, насчет загрузки БОЛЬШИХ изображений на QGraphicsView ничего не скажу, честно говоря, с трудом представляю, зачем такое надо грузить именно на QGraphicsView - этот класс предназначен для отображения части QGraphicsScene, о чём явно написано в документации, картинки же прекрасно грузятся на QLabel через QPixmap, я это делал вполне успешно по документации, всё летало с крупными фотографиями Название: Re: QGraphicsView Отправлено: Igors от Июль 15, 2015, 08:54 Требуется загрузить огромную картинку в QGraphicsView в виде блоков по 500-1000 пикселей, попробовал это сделать через QImageReader + setClipRect + read() + конвертирование из qimage в qpixmap , ну все работает, но работает ну ОЧЕНЬ долго, как это можно сделать быстрее? Порезать на "порционные куски". Если большой исходный имедж влазит в память, то сначала грузите его весь и сохраняете кусок за куском на диске, желательно в своем, неупакованном формате. Если не влазит - читаете тем же QImageReader порциями по N строкНазвание: Re: QGraphicsView Отправлено: _Vitaliy_ от Июль 22, 2015, 18:25 В книге у Андрея Боровского "Qt4.7+. Практическое программирование на C++" есть интересующий Вас вопрос (ИМХО) глава 9: "Виджет для вывода больших изображений......299"
Название: Re: QGraphicsView Отправлено: Pritcher от Январь 22, 2016, 09:00 По поводу таймера. Можно сделать проще, чем описал Гурман.
Создаете объект класса QTime, запускаете его методом start(). В wheelEvent вставляется проверку на пройденное время. Если прошло менее 5 секунд, то выходите из события, иначе выполняете действия, необходимые вам. Код примерно следующий Код: void Widget::wheelEvent( QWheelEvent * event ) Название: Re: QGraphicsView Отправлено: Гурман от Январь 27, 2016, 15:40 По поводу таймера. Можно сделать проще, чем описал Гурман. Создаете объект класса QTime, запускаете его методом start(). В wheelEvent вставляется проверку на пройденное время. Если прошло менее 5 секунд, то выходите из события, иначе выполняете действия, необходимые вам. Код примерно следующий Код: void Widget::wheelEvent( QWheelEvent * event ) Это не "проще" - это работает иначе и не так, как требовалось. "Необходимые действия" выполнятся только если через 5 секунд покрутят колёсико. Если колёсико вообще не покрутят, то действия не выполнятся никогда. А надо сделать так, чтобы они выполнились, если в течение 5 секунд его не крутили. |