我想将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 上显示图像,然后我想存储我已经显示的图像的图像路径。
答案 0 :(得分:1)
nil
返回QTableWidgetItem::data()
,您将获得QVariant
的数据。
或者,使用QVariant::value()
。
答案 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));
并更改检索以匹配。