我可以在QListWidget的每个项中存储一些用户数据吗?

Can I store some user data in every item of a QListWidget?

本文关键字:用户 用户数 数据 存储 QListWidget 我可以      更新时间:2023-10-16

我想在QListWidget中存储一些文件名。我需要有完整的文件路径,但我只想显示基本文件名。我可能可以将每个项目的完整文件名存储在工具提示中,但我不想为列表项目提供工具提示。

您可以为每个QListWidgetItem设置数据并从中获取数据。参见QListWidgetItem::setData()和QListWidgetItem::data()。可以为不同的角色设置数据。使用Qt::UserRole,这是"第一个可以用于特定应用程序目的的角色"。

试试这样写:

QListWidgetItem *newItem = new QListWidgetItem;
QString fullFilePath("/home/username/file");
QVariant fullFilePathData(fullFilePath);
newItem->setData(Qt::UserRole, fullFilePathData);
newItem->setText(itemText);
listWidget->insertItem(row, newItem);

:

QListWidgeItem* currentItem = listWidget->currentItem();
if (currentItem != 0) {
     QVariant data = currentItem->data(Qt::UserRole);
     QString fullFilePath = data.toString();
}

下面是Python (PyQt5)的样子:

from PyQt5 import QtCore, QtWidgets

# Creates a QListWidgetItem
item_to_add = QtWidgets.QListWidgetItem()
# Setting your QListWidgetItem Text          
item_to_add.setText('String to Display')   
  
# Setting your QListWidgetItem Data  
item_to_add.setData(QtCore.Qt.UserRole, YOUR_DATA) 
# Add the new rule to the QListWidget
YOUR_QListWidget.addItem(item_to_add)            

检索数据:

# Looping through items
for item_index in range(YOUR_QListWidget.count()):  
    # Getting the data embedded in each item from the listWidget
    item_data = YOUR_QListWidget.item(item_index).data(QtCore.Qt.UserRole)  
    # Getting the datatext of each item from the listWidget
    item_text = YOUR_QListWidget.item(item_index).text()