2011-11-09 59 views
4

我已經嘗試了多種方式來QTableWidget單元格中顯示QIcon,我不知道爲什麼它不工作。我有一個按鈕,當按下時向表格添加一行。這裏是代碼...QT QIcon在QTableWidget單元格

void MainWindow::pressed() 
{ 
    QTableWidgetItem *item = new QTableWidgetItem("Hello, world!"); 
    QTableWidgetItem *icon_item = new QTableWidgetItem; 
    QIcon icon("/verified/path/to/icon.png"); 
    icon_item->setIcon(icon); 

    int row = ui->tableFeed->rowCount(); 
    ui->tableFeed->insertRow(row); 
    ui->tableFeed->setItem(row, 0, icon_item); 
    ui->tableFeed->setItem(row, 1, item); 
} 

而它只是不起作用。該單元格中沒有顯示任何內容。有任何想法嗎?

編輯:setItem調用,我將它設置爲icon是一個錯字。實際的代碼將其設置爲QTabeWidgetItem icon_item。我已經在上面的代碼中更正了它。

+0

感謝您的代碼示例設置,它的工作對我來說!我就像下面,希望有幫助。我想你的問題是圖像路徑。 sIconPath =「:/images/NetworkStatusUnkown.png」; //資源圖片 QTableWidgetItem * item = new QTableWidgetItem(ss); //從狀態構建圖標 QIcon icon2(sIconPath); item-> setIcon(icon2); ui-> tableWidgetSearchResult-> setItem(iRow,0,item); – JohnnyLinTW

回答

1

當我想將一個圖標添加到單元格時,我通常在模型中執行此操作。

在數據方法中,您可以將它們置於裝飾角色之下。

else if(role == Qt::DecorationRole) 
{ 
    switch(index.column()) 
    { 
     case MOVIE: 
     { 
      if(valueAt(index).toString() == "Godfather") return QIcon(":/16x16/godfather.png"); 
     } 
    } 
} 

希望這會有所幫助。

2

您必須將圖標設置爲QTableWidgetItem,然後加載圖標項而不是圖標本身。

QTableWidgetItem *item = new QTableWidgetItem("Hello, world!"); 
QTableWidgetItem *icon_item = new QTableWidgetItem; 
QIcon icon("/verified/path/to/icon.png"); // It is better to load the icon from the 
              // resource file and not from a path 
icon_item->setIcon(icon); 

int row = ui->tableFeed->rowCount(); 
ui->tableFeed->insertRow(row); 
ui->tableFeed->setItem(row, 0, icon_item); 
ui->tableFeed->setItem(row, 1, item); 

如果您可以看到字符串項目而不是圖標,那麼圖標路徑有問題。

+0

我可以看到字符串項目,而不是圖標,但是我通過終端驗證了路徑,並且有雙重和三重檢查。是否還有其他可能的問題(圖標大小等)? – linsek

+0

你能粘貼你構建圖標的地方(使用你正在使用的路徑)嗎? – pnezis

+0

'QIcon圖標(「/ home/njozwiak /圖片/圖標。png「);' – linsek

2

由於webclectic指出的那樣,你可能想的項目設置爲icon_item

ui->tableFeed->setItem(row, 0, icon_item); 

...如果它確實編譯這樣,那麼我想這是一個使用它的available constructors的一個構建隱QTableWidgetItem 。

我不確定如果圖標不能從指定的png構造出來會發生什麼情況,但是您也可以檢查以確保圖標確實正確加載並且可以正確顯示。例如,icon.isNull()返回什麼?如果你把它放在標籤中會發生什麼?

另一種選擇是從像素圖加載圖標,你可以驗證它確實是正確加載:

QPixmap p; 
if (!p.load(yourFilename) || p.isNull()) { qDebug() << "Error!"; } 
QIcon icon = QIcon(p); 
// and if wanted: label->setPixmap(p) 
+0

我添加了'if(icon.isNull()){qDebug()<<「Error:null icon」;}'這一行,並且沒有顯示任何消息,所以我修改了一個文件的路徑不存在,我仍然沒有收到消息,所以它看起來像文件是否存在,'icon'不爲空 – linsek

+0

我怎麼會把它放在一個標籤? – linsek

+0

'label.setPixmap(icon.pixmap (寬度,高度))'我也編輯了我的文章,以包含第二種方式來加載圖像。 –

0

你必須首先用前綴圖標的資源,這些工作:

item = QtGui.QTableWidgetItem() 
icon2 = QtGui.QIcon() 
icon2.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/FSTable.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) 
item.setIcon(icon2) 

赦免,上面是一個PyQt的代碼,但是你可以看到圖標必須使用addPixmap

相關問題