从 QTableWidgetItem 获取值

Getting value from QTableWidgetItem

我想将QTableWidgetItem的数据设置为图像。 imagePath每次可能不同

QTableWidgetItem *itemMedia = new QTableWidgetItem();
itemMedia->setTextAlignment(Qt::AlignCenter);
itemMedia->setData(Qt::DecorationRole, QPixmap(imagePath).scaled(width, 100, Qt::KeepAspectRatio, Qt::SmoothTransformation));
m_table->setItem(0,0,itemMedia);
m_table->setItem(0,1,itemMedia);
m_table->setItem(1,0,itemMedia);
m_table->setItem(1,1,itemMedia);

我创造的很好。接下来,我想用这个获取数据:

connect(m_table, SIGNAL(itemClicked(QTableWidgetItem *)), this, SLOT(onItemClicked(QTableWidgetItem *)));

void MUCSharedMedia::onItemClicked(QTableWidgetItem *item)
{
    qDebug()<<"DecorationRole: " <<item->data(Qt::DecorationRole).toString();
    qDebug()<<"DisplayRole: " <<item->data(Qt::DisplayRole).toString();
}

实际上我想要 imagePath 作为其中一个角色,但是我在 Application Console:

中看到了这一行
DecorationRole:  ""
DisplayRole:  ""

如何获取价值?有什么建议吗?

已编辑: 我想在每个 QTableWidgetItem 上显示图像,然后我想存储我显示的图像的图像路径。

QTableWidgetItem::data() returns QVariant 您将在其中使用 QVariant::value() 获取数据。

或者,使用 QTableWidget::text()

http://doc.qt.io/qt-5/qtablewidgetitem.html

如果实际需要存储QString,则需要DisplayRole两次:

itemMedia->setData(Qt::DisplayRole, imagePath);

qDebug()<<"DisplayRole: " <<item->data(Qt::DisplayRole).toString();

编辑:如果您需要显示图像并获取图像文件路径,我建议您使用另一种方式:

1) 像您一样设置图像:

itemMedia->setData(Qt::DecorationRole, QPixmap(imagePath).scaled(width, 100, Qt::KeepAspectRatio, Qt::SmoothTransformation));

2) 使用Qt::UserRole

设置图片路径
itemMedia->setData(Qt::UserRole, imagePath);

当您需要时:

qDebug()<<"File Path: " <<item->data(Qt::UserRole).toString();

但应用程序将使用图像进行显示。

你存储了一个QPixmap:

itemMedia->setData(Qt::DecorationRole, QPixmap(imagePath).scaled(width, 100, Qt::KeepAspectRatio, Qt::SmoothTransformation));

但尝试将其提取为 QString:

qDebug()<<"DecorationRole: " <<item->data(Qt::DecorationRole).toString();

这将始终为您提供默认构造的(即空的)QString。

您想将其作为 QPixmap 检索:

item->data(Qt::DecorationRole).value<QPixmap>()

(尽管将其发送到 QDebug 流毫无意义!)

您很有可能需要原始的、未缩放的像素图。在这种情况下,您还需要将其存储在 Qt::UserRole:

itemMedia->setData(Qt::UserRole, QPixmap(imagePath));

并更改检索以匹配。