открытие файла и его передача в PaintEvent
QPaintEvent, C++, QPainter, QImage
Доброго времени суток.
Появился вопрос. Не могу придумать, как его решить.
Есть некая папка. Мы из этой папки прекрасно можем считать файлы png.
И есть прекрасная функция PaintEvent, которая перерисовывает всё, что в неё не сунь.
#include <QMainWindow> #include <QPicture> #include <QImage> #include <QPainter> #include <QFileDevice> #include <QFileDialog> #include <QWidgets> MainWindow::MainWindow(QWidget *parent):QWidget(parent) { setPalette(QPaette(QT::white)); setWindowTitle("Image") } void MainWindow::paintEvent(QPaintEvent *) { QString fileName = QFileDialog::getOpenFileName(this, tr("Open file"), QDir::currentPath()); QImage img(fileName); QPainter painter(this); painter.drawImage(0,0, img.scaled(this->size())); }Вопрос заключается в том, что как сначала считать картинку, а потом отправить её в paintEvent??? Пробовал подавать в paintEvent дополнительные параметры, но ничего не происходило.
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
B
- Bogdannn
- 28 марта 2024 г. 2:15
C++ - Тест 001. Первая программа и типы данных
- Результат:46баллов,
- Очки рейтинга-6
Последние комментарии
Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий Кононенко5 февраля 2024 г. 9:50
EVA25 декабря 2023 г. 18:30
Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Сейчас обсуждают на форуме
Как получить в массив значения из связанной модели? Спасибо, разобрался:))
AC
QML Обнулить значения SpinBox Доброго времени суток, не могу разобраться с обнулением значение SpinBox находящего в делегате. import QtQuickimport QtQuick.ControlsWindow { width: 640 height: 480 visible: tr…
Alexandru Codreanu19 января 2024 г. 19:57
BlinCT27 декабря 2023 г. 16:57
Дмитрий10 января 2024 г. 12:18
Evgenii Legotckoi12 декабря 2023 г. 14:48
Картинку можно считать ещё в конструкторе класса и сохранить изображение в локальную переменную, которая будет объявлена в заголовочном файле, в объявлении класса MainWindow.
Забыл добавить. Перерисовка через paintEvent() метод вызывается с помощью метода update() , вызов метода update() инициирует перерисовку через стек вызовов событий в виджете.
Спасибо за прошлый ответ. Но вот сейчас хотел бы задать уточняющий вопрос. А как это сделать не вызывая файл в конструкторе.
На самом деле делаю просмотр изображений
mainwindow.h
Как лучше вызвать изображение?
Скорее всего проблема вот в этом месте.
Нет, не работает зависает в
Сейчас пробую как раз на примере, что выложил. Он чист от всякой всячины уже.
Понятия не имею, почему у вас это не работает. Возможно ещё из-за вот этой непонятной строчки, которая по логике там быть не должна.
Хорошо, тогда прошу пояснить мне вот что. В вашем примере. Как его изменить так, чтобы создавать изображение не из конструктора а из своей функции. А потом кидать картинку в paintE...
В отладчике - выбрал файл - он создал картику - возникает ошибка
Пример-то посмотрите как следует. Там нет создания картинки в конструкторе. Вы путаете объявление класса с конструктором класса. А иначе как через локальную переменную вы перекинуть изображение или путь к нему не сможете. Метод paintEvent() вызывается в рамках стеках событий приложения Qt, а значит добавить дополнительные аргументы у вас не получится к этому методу, только перегрузка.