从QTableWidgetItem获取价值

时间:2015-12-01 11:34:58

标签: c++ qt 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 ,但我在应用程序控制台中得到了这一行:

DecorationRole:  ""
DisplayRole:  ""

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

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

3 个答案:

答案 0 :(得分:1)

nil返回QTableWidgetItem::data(),您将获得QVariant的数据。

或者,使用QVariant::value()

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

并更改检索以匹配。