Qt - QTableWidget单元格中的QIcon

时间:2011-11-09 19:08:19

标签: qt icons 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);
}

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

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

4 个答案:

答案 0 :(得分: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);

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

答案 1 :(得分: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)

答案 2 :(得分:1)

当我想向单元格添加图标时,我通常会在模型中执行此操作。

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

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

希望这有帮助。

答案 3 :(得分: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设置图标