QImage в сцене QGraphics

#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));