我尝试了很多方法在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
。我在上面的代码中更正了它。
答案 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
设置图标