正在从QTableWidgetItem获取值

Getting value from QTableWidgetItem

本文关键字:获取 QTableWidgetItem      更新时间:2023-10-16

我想将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担任其中一个角色,但我在应用程序控制台中得到了这一行:

DecorationRole:  ""
DisplayRole:  ""

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

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

如果您实际上需要存储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();

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

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

或者,使用QTableWidget::text()

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

存储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));

并将检索更改为匹配。