2014-01-13 7 views
1

я хранятся изображения в плате локального каталога (/home/images/system/image.png)как загружать изображения для painter.drawimage функции

для функции painter.drawimage передать QPoint и QImage в качестве параметра.

painter.drawImage(QRect(100, 50, 100, 100), QImage("home/images/system/image.png")); 

Могу ли я напрямую использовать путь для изображения здесь? Если я загружу, как это, он не работает Правильно ли это путь прохождения образа, который хранится в каталоге?

+0

Вы должны использовать ресурсы: http://qt-project.org/doc/qt-5.0/qtcore/resources.html –

+0

Если мы храним локальный каталог, как пройти путь? – user3167959

+0

Проверьте это обсуждение: http://stackoverflow.com/questions/7741444/qt-how-to-access-resources –

ответ

0

Вместо

painter.drawImage(QRect(100, 50, 100, 100), QImage("/home/images/system/charge1.png")); 

вы можете использовать

QImage image("home/images/system/charge1.png"); 
painter.drawImage(rect, image); 

В документации вы можете увидеть

QRectF target(10.0, 20.0, 80.0, 60.0); 
QRectF source(0.0, 0.0, 70.0, 40.0); 
QImage image(":/images/myImage.png"); 

QPainter painter(this); 
painter.drawImage(target, image, source); 

по ссылке: http://qt-project.org/doc/qt-4.8/qpainter.html#drawImage-5

Кроме того, я реко ИСПРАВЬТЕ использовать файлы ресурсов в Qt:

+0

Пожалуйста, сделайте _not_ использование 'u' для вас. Это один из самых раздражающих типов для написания вместе с «r» для «are» .. – lpapp

+0

извините .. вот после того, как я буду .. – Wagmare

0
  1. вам не хватает передний слэш
  2. загрузки изображения в случае краски является плохой подход
  3. попробовать это:

.

QImage img("/home/images/system/image.png"); 
Q_ASSERT(!img.isNull()); 
painter.drawImage(QRect(100, 50, 100, 100), img); 
+0

Должен ли я загрузить изображение в папку с ресурсами? – user3167959

+0

Здесь нет ресурсов. ИМО это не имеет никакого отношения к вашей проблеме. Если вы рисуете в виджетах, сделайте QImage поле этого виджета, чтобы предотвратить многократную перезагрузку изображения. Это утверждение только гарантирует, что изображение правильно загружено, ваша проблема была опечатана по пути. –

1

Вы можете увидеть себя несоответствие между расположением и путем, который вы пытаетесь загрузить:

Я сохранил изображения в плате локального каталога (/ главных/изображения/система/изображении. PNG)

, а затем:

painter.drawImage(QRect(100, 50, 100, 100), QImage("home/images/system/image.png")) 

Вы пропускаете водительство слэш для абсолютного пути. Почему ваша программа в настоящее время не работает, потому что программа ищет изображение относительно приложения в противоположность абсолютному пути.

Решение было бы внести небольшое исправление к вышеупомянутой линии следующим образом:

painter.drawImage(QRect(100, 50, 100, 100), QImage("/home/images/system/image.png")) 
                ^

Однако, это просто быстрый обходной путь. В идеальном мире вы действительно не загрузили бы подобные изображения, и особенно не из разных домашних папок, чем пользователь, запускающий приложение.

Если вы использовали домашний каталог того же пользователя, вы бы не использовать жесткий кодированный путь, но следующий вариант из QStandardPaths:

QStandardPaths::HomeLocation 8 Returns the user's home directory. 

Это очень плохая практика жесткого кода длинный абсолютный путь что, если это действительно необходимо, но это редкость.

В качестве альтернативы, вы можете также поместить изображение рядом с приложением, и загрузить его следующим образом:

painter.drawImage(QRect(100, 50, 100, 100), 
        QImage(QString("%1/image.png") 
        .arg(QCoreApplication::applicationDirPath())); 

Согласно QCoreApplication documentation for this method.

Я, вероятно, придерживаюсь последней опции или, по крайней мере, вышеупомянутого домашнего пути без жесткого кодирования.

Конечно, вы всегда можете использовать Qt resource system, но я думаю, что в этом простом случае было бы слишком сложно, если вы не хотите, чтобы изображение было в комплекте, так что вам не нужно разворачивать его отдельно , В этом случае вы писали бы что-то вроде этого:

painter.drawImage(QRect(100, 50, 100, 100), QImage(":/image.png")); 

и вы бы иметь свой файл ресурсов в .pro файле QMAKE следующим образом:

RESOURCES += myresourcefile.qrc 

и файл ресурсов будет содержать что-то вроде это:

<!DOCTYPE RCC><RCC version="1.0"> 
<qresource> 
    <file>image.png</file> 
</qresource> 
</RCC>