Qt - QTableWidget 单元格中的 QIcon

lin*_*sek 7 icons qt qtablewidget

我尝试了多种方法在 QTableWidget 单元格中显示 QIcon,但我不确定为什么它不起作用。我有一个按钮,按下时会在表格中添加一行。这是代码...

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);
}
Run Code Online (Sandbox Code Playgroud)

它只是不起作用。该单元格中没有显示任何内容。有任何想法吗?

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

pne*_*zis 5

您必须将图标设置为 a 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);
Run Code Online (Sandbox Code Playgroud)

如果您可以看到字符串项而不是图标,则说明图标路径有问题。


Wes*_*Wes 2

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

在数据方法中,您可以将它们放在装饰角色下。

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

希望这可以帮助。