从 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()
。
如果实际需要存储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));
并更改检索以匹配。
我想将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()
。
如果实际需要存储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));
并更改检索以匹配。