2015-04-01 105 views
0

我在使用QPainter從資源繪製QWidget上的圖像時遇到了一些問題。我確定我錯過了一些東西,但我真的不知道該怎麼辦。如果我使用絕對路徑,它工作正常。Qt - 使用QPainter從資源中繪製像素圖(.png文件)

所以我的問題是:如果我想用QPainter從資源中繪製.png文件,該怎麼辦? (我缺少什麼?)

這裏是我的簡單的測試代碼:

Widget.h:

#ifndef WIDGET_H 
#define WIDGET_H 

#include <QWidget> 
#include <QPaintEvent> 
#include <QPixmap> 
#include <QPainter> 

class Widget : public QWidget { 
    Q_OBJECT 

    public: 
     Widget(QWidget *parent = 0); 

    protected: 
     void paintEvent(QPaintEvent* e); 

}; 

#endif // WIDGET_H 

Widget.cpp:

#include "Widget.h" 

Widget::Widget(QWidget *parent): QWidget(parent) { } 

void Widget::paintEvent(QPaintEvent *e) { 

    QPainter painter(this); 

    QPixmap pixmap1("C:/Qt/Projects/pixmapTest/image.png"); 
    QPixmap pixmap2(":/img/image.png"); 
    QPixmap pixmap3("qrc:/img/image.png"); 


    painter.drawPixmap(10,10,50,50, pixmap1); // this works 
    painter.drawPixmap(10,70,50,50, pixmap2); // this not 
    painter.drawPixmap(10,130,50,50, pixmap3); // this neither 
} 

img.qrc文件:

<RCC> 
    <qresource prefix="/img"> 
     <file>image.png</file> 
    </qresource> 
</RCC> 

和.pro文件:

#------------------------------------------------- 
# 
# Project created by QtCreator 2015-04-01T17:11:38 
# 
#------------------------------------------------- 

QT  += core gui 

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 

TARGET = pixmapTest 
TEMPLATE = app 


SOURCES += main.cpp\ 
     Widget.cpp 

HEADERS += Widget.h 

FORMS += 

RESOURCES += \ 
    img.qrc 
+0

我可以同時看到'pixmap1'和'pixmap2'。你的窗戶夠大嗎? – svlasov 2015-04-01 16:57:37

+0

是的,它是..默認情況下cca 500x500我認爲 – Pyro 2015-04-01 17:04:47

+0

可以請你給我你的整個項目? – Pyro 2015-04-01 17:07:43

回答

7

正如我所料,這確實是一個愚蠢的問題。所有我要做的就是清潔工程,qmake的運行和建設...感謝svlasov :)

編輯: 所以爲了吸取資源png格式與QPainter的和QPixmap的文件,你必須: 添加圖片資源

<RCC> 
    <qresource prefix="/img"> 
     <file>image.png</file> 
    </qresource> 
</RCC> 

那麼你可以使用相對路徑來在資源文件喜歡這裏(格式爲「:/prefix/you/created/file.something」或者你可以使用別名 - 這裏是documentation

QPixmap pixmap2(":/img/image.png"); 

then dr AW它

QPainter painter(this); 
painter.drawPixmap(10,70,50,50, pixmap2); 

和清理並生成項目,也將努力:)