2015-11-25 60 views
0

我正在學習如何使用Qt進行C++編程。當我點擊一個按鈕並且與該按鈕相關的矩陣上的位置等於-1時,我想要顯示這個圖像,我還想清除同一按鈕上的文本,我的代碼直到現在爲止部分是:QIcon不會顯示在QPushButton

if(Tabuleiro[x][y] == -1){ 
    this->Botoes[x][y]->setText(""); 
    this->Botoes[x][y]->setIcon(QIcon("bomba.png")); 
} 

作爲在Tabuleiro爲int的矩陣,Botoes是指針QPushButtons和「bomba.png」的矩陣我想要顯示的圖像。該圖像與項目位於相同的文件夾中,但是一旦我運行它就不會顯示。我也使用Qt資源系統tryed,我創建了一個名爲imagens.qrc它我創建了一個前綴/Imagem,放在我的形象有新的資源,這是看起來像在這之後是什麼代碼:

if(Tabuleiro[x][y] == -1){ 
     this->Botoes[x][y]->setText(""); 
     this->Botoes[x][y]->setIcon(QIcon(":/Imagem/bomba.png")); 
    } 

但它仍然將無法工作。我究竟做錯了什麼?另外,我tryed使用

this->Botoes[x][y]->text().clear(); 

,而不是

this->Botoes[x][y]->setText(""); 

但它沒有工作,你知道爲什麼嗎?

+0

確保PNG在您的應用程序的工作目錄中(可執行文件所在的位置)。 – Archie

+0

@Archie工作目錄與可執行目錄不一樣 –

+0

@joão-areias考慮使用Qt資源系統http://doc.qt.io/qt-5/resources.html –

回答

1

請包括<QApplication><QStyle>和嘗試:

this->Botoes[x][y]->setIcon(qApp->style()->standardIcon(QStyle::SP_MessageBoxWarning)); 

如果它的工作原理(警告顯示圖標):那麼,這意味着你沒有正確加載你的資源。

您還可以檢查此:

QPixmap foo(":/Imagem/bomba.png"); 
bool found = !foo.isNull(); // true if png file was found, false if it was not 

如果是假,再次,它意味着你沒有正確加載你的資源,如果屬實,圖標應該在按鈕上顯示。

更多信息,您還可以嘗試this->Botoes[x][y]->setIconSize(QSize(16,16)),因爲如果有人早些時候做過this->Botoes[x][y]->setIconSize(QSize(0,0));您的按鈕圖標將不會顯示!

+0

所以b應該是真的是找到了png?這很奇怪,我認爲這是錯誤的,因爲在foo上有東西,它不是null。但是,謝謝,自從圖標顯示出來後加載資源時我搞砸了 –

+0

我的錯誤,我編輯了這篇文章。 'isNull'表示沒有找到png。 – jpo38