Qt - QIcon在QTableWidget单元格



我已经尝试了许多方法来显示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);
}

它就是不起作用。该单元格中没有显示任何内容。什么好主意吗?

编辑:我将其设置为icon的setItem调用是一个错字。实际代码将其设置为QTabeWidgetItem icon_item。我已经在上面的代码中更正了它

您必须将图标设置为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);

如果你能看到字符串项而不是图标,那么图标路径有问题

正如webelectic指出的那样,您可能希望将项目设置为icon_item:

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

…如果它确实以这种方式编译,那么我猜它正在使用其可用的构造函数之一构造隐式QTableWidgetItem。

我不确定如果图标不能从指定的png构造会发生什么,但您也可以检查以确保图标确实正确加载并可以正确显示。例如,icon.isNull()返回什么?如果你把它放在标签里会发生什么?

另一个选择是从像素图中加载图标,这样你就可以验证它是否正确加载:

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

您必须首先创建一个带有前缀图标的资源,以使其工作:

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

设置图标。

当我想向单元格添加图标时,我通常在模型中进行。

在data方法中,您可以将它们置于装饰角色下。

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

最新更新