#qt #qimage #qgraphicsscene
#qt #qimage #qgraphicsscene
Вопрос:
Я совсем новичок в Qt. У меня возникли проблемы при вставке QImage
в сцену. Не мог бы кто-нибудь, пожалуйста, сказать мне, как добавить QImage
в QGraphicsScene
?
Ответ №1:
Для этого вы бы использовали a, QGraphicsPixmapItem
который вы добавляете в сцену, как и любой другой QGraphicsItem
.
QGraphicsPixmapItem
Может быть инициализировано с помощью QPixmap
, которое является зависящим от устройства представлением растрового изображения, и вы можете получить его из QImage
, например, с помощью статической функции QPixmap::fromImage()
.
Обновление (пример кода)
#include <QtGlobal>
#if QT_VERSION >= 0x050000
#include <QtWidgets>
#else
#include <QtGui>
#endif
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QImage image("test.png");
QGraphicsPixmapItem item( QPixmap::fromImage(image));
QGraphicsScene* scene = new QGraphicsScene;
scene->addItem(amp;item);
QGraphicsView view(scene);
view.show();
return a.exec();
}
Комментарии:
1. Привет, я попробовал это решение, но у меня оно не сработало. Я вставил свой код ниже.
2. Привет, я попробовал это решение, но у меня оно не сработало. Я вставил свой код ниже. Сцена QGraphicScene; QImage* qimage = новый QImage(«./IMG_2938.JPG «); QGraphicsPixmapItem pixmapItem(QPixmap::FromImage(*qimage)); scene.addItem(amp;pixmapItem); QGraphicsView view (amp;scene); view.show(); Он не показывает изображение, просто окно, но он просто показывает пустое поле. Надеюсь, кто-нибудь сможет ответить.
3. Я добавил несколько примеров кода к своему ответу. У меня это работает (это очень близко к тому, что вы опубликовали). Итак, на ум приходят две вещи: 1. Вы уверены, что изображение найдено и загружено правильно? (проверьте QImage::isNull() или явно используйте QImage::load() и проверьте возвращаемое значение) 2. Если вы помещаете объекты в стек вместо кучи, убедитесь, что они все еще активны, когда они используются.
4. Код в примере не будет работать после того, как функция, содержащая
item
возвраты, посколькуitem
уничтожается при возврате.5.
error: variable 'QGraphicsPixmapItem item' has initializer but incomplete type QGraphicsPixmapItem item( QPixmap::fromImage(image));
Ответ №2:
Как предположил @Neal, addPixmap работает намного проще, и там, где QGraphicsPixmapItem не будет работать для меня по какой-то неизвестной причине. Предполагая, что у вас есть настройка QGraphicsScene
, QGraphicView
и остальной части программы, приведенный ниже код будет просто отображать изображение:
QString filename = "C:/image.png";
QImage image(fileName);
scene->addPixmap( QPixmap::fromImage(image));