АК
Александр Кузьминых07 серпня 2017 р. 02:06

Средство просмотра фотографий Windows в Qt.

Добрый день, EVILEG. В проекте нужно реализовать функционал стандартного приложения Windows (увеличивать изображение колесиком мышки,  скроллить увеличенное изображение движением мышки с зажатой левой кнопкой).
Поискав в интернете, нашел я мало чего, лишь пример от Qt с QScrollArea и QLabel.
Было решено  реализовать нужный функционал следующим образом:
На картинке, что я приложил к данной теме, под номером 1  я буду использовать QLabel, , под номером 2 - QScrollArea.
В главном окне приложения (класс MainWindow::public QMainWindow) центральным виджетом установлю QScrollArea, у QScrollArea установлю setWidged(QWidget wgt) свой QLabel, в который помещу QPixmap.  Скролл увеличенного изображения движением мышки с зажатой кнопкой я реализовал через mousePressEvent и mouseMoveEvent, вызывая в последнем метод QScrollBar::setValue(). По умолчанию, движения колесика мышки скроллят содержимое, но я (пока что еще не реализовал это) заставлю не скроллить, а масштабировать (надеюсь, это возможно) :)
Мой вопрос в том, правильно ли я подошел к решению задачи, правильно ли выбрал средства, с помощью которых можно реализовать функционал просмотрщика windows, или есть способ получше. Просто есть ощущение, что я использую QScrollArea не для тех целей, для которых он создан.

средство_просмотра-min.png
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

7
Evgenii Legotckoi
  • 07 серпня 2017 р. 02:25
  • Відповідь була позначена як рішення.

Добрый день!

Масштабировать изображение возможно. Делается это через метода resize().
Подход с использованием QScrollArea также верный. Реализацию можете подсмотреть в примере в самом Qt Creator`е. Поищите в нём пример с названием imageViewer. Такм реализовно через горячие клавиши, без использования колёсика мыши, но не думаю, что для Вас составит проблему использовать код масштабирования для колёсика мыши. Посмотрите реализацию метода scaleImage(double factor) в том примере, который как раз отвечает за масштабирование изображения.

    Я на этот пример и опирался :) Мне нужно было знать, правильный ли это способ. Благодарю за твое мнение :)

      Evgenii Legotckoi
      • 07 серпня 2017 р. 03:07
      • (відредаговано)

      Я думаю, что это верное решение. Можно ещё рисовать на QGraphicsScene. Там может быть несколько проще с масштабированием. Поскольку, если не ошибаюсь, в графической сцене присутсвует масштабирование и зум. Но здесь всё зависит от необходимого функционала. Если нужно просто просматривать картинки, то хватит и примера imageViewer. Если потребуется рисовать, то тут уже лучше использовать QGraphicsScene.

        BlinCT
        • 07 серпня 2017 р. 04:20

        У меня возникает вопрос к автору вопроса - а то что вы хотите сделать какие отношение имеет именно к мелкомягкой? То есть на других системах это самое не будет работать? Мне просто не понятно уточнение про работу с дырявыми окнами))

          АК
          • 07 серпня 2017 р. 06:37

          Просмотрщик фотографий был выбран как пример. А так программа будет работать на Windows. На других системах нет API для видеокамеры BMR-140LM-U.
          Если есть предложения как работать видеокамерой без API, я бы с радостью их услышал, потому что в будущем задача работоспособности программы на Linux будет стоять, а в разработке у меня опыта мало.

            BlinCT
            • 07 серпня 2017 р. 10:31

            Теперь понятно. Про видеокамеру был не в курсе. Но думаю что если вы будете писать прогу не привязываясь к системе то потмо подсунув другую доступную камеру будет все норм. Или можно попробовать написать производителю и спросить.

              АК
              • 09 серпня 2017 р. 01:56

              Да, либо другую камеру будем искать, либо писать производителю, но есть большие сомнения насчет того, что у них где-то завалялось API на Linux :)

                Коментарі

                Only authorized users can post comments.
                Please, Log in or Sign up
                sf

                C++ - Тест 004. Указатели, Массивы и Циклы

                • Результат:90бали,
                • Рейтинг балів8
                МВ

                Qt - Тест 001. Сигналы и слоты

                • Результат:68бали,
                • Рейтинг балів-1
                ЛС

                C++ - Тест 001. Первая программа и типы данных

                • Результат:53бали,
                • Рейтинг балів-4
                Останні коментарі
                A
                ALO1ZE19 жовтня 2024 р. 08:19
                Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                ИМ
                Игорь Максимов05 жовтня 2024 р. 07:51
                Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                d
                dblas505 липня 2024 р. 11:02
                QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                k
                kmssr08 лютого 2024 р. 18:43
                Qt Linux - Урок 001. Автозапуск програми Qt під Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                АК
                Анатолий Кононенко05 лютого 2024 р. 01:50
                Qt WinAPI - Урок 007. Робота з ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                Тепер обговоріть на форумі
                J
                JacobFib17 жовтня 2024 р. 03:27
                добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
                ИМ
                Игорь Максимов03 жовтня 2024 р. 04:05
                Реализация навигации по разделам Спасибо Евгений!
                JW
                Jhon Wick01 жовтня 2024 р. 15:52
                Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
                КГ
                Кирилл Гусарев27 вересня 2024 р. 09:09
                Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
                F
                Fynjy22 липня 2024 р. 04:15
                при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

                Слідкуйте за нами в соціальних мережах