2014-01-13 65 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

另外,我RECOM MEND您使用資源文件中的Qt:

+0

請不要使用'u'給你。這是與'r'爲'are'一起寫的最煩人的類型之一。 – lpapp

+0

對不起..這裏後我會.. – Wagmare

0
  1. 你缺少前斜線
  2. 油漆事件
  3. 加載圖像是不錯的辦法
  4. 試試這個:

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

我應該需要加載資源文件夾中的圖像? – user3167959

+0

這裏沒有資源可供選擇。海事組織與你的問題無關。如果您在小部件中繪畫,則將QImage設置爲此小部件的一個字段,以防止多次重新載入圖像。這斷言只確保圖像正確加載,你的問題是路徑錯字。 –

1

您可以看到自己的位置,你試圖加載路徑之間的矛盾:

我有本地目錄(/ home /圖片/系統/圖像存儲在板上的圖像。 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>