QListWidgetItem setData设置类对象
时间: 2024-03-30 09:09:56 浏览: 147
对象成员-c++类和对象
在 QListWidgetItem 的 `setData()` 函数中,可以使用 `QVariant` 类型来设置类对象作为对象数据。以下是一个示例:
```cpp
#include <QApplication>
#include <QListWidget>
#include <QListWidgetItem>
class MyClass {
public:
MyClass(const QString& name, int number) : mName(name), mNumber(number) {}
QString name() const { return mName; }
int number() const { return mNumber; }
private:
QString mName;
int mNumber;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QListWidget listWidget;
MyClass obj1("Object 1", 123);
QListWidgetItem *item1 = new QListWidgetItem("Item 1");
item1->setData(Qt::UserRole, QVariant::fromValue(obj1)); // 设置对象数据为 MyClass 类的对象
MyClass obj2("Object 2", 456);
QListWidgetItem *item2 = new QListWidgetItem("Item 2");
item2->setData(Qt::UserRole, QVariant::fromValue(obj2)); // 设置对象数据为 MyClass 类的对象
listWidget.addItem(item1);
listWidget.addItem(item2);
// 获取对象数据并使用
MyClass obj = item1->data(Qt::UserRole).value<MyClass>();
qDebug() << "Name: " << obj.name();
qDebug() << "Number: " << obj.number();
listWidget.show();
return app.exec();
}
```
在上面的例子中,我们创建了一个自定义类 MyClass,该类具有名字和数字属性。我们创建了两个 MyClass 的对象 obj1 和 obj2,并将它们分别作为对象数据设置给了两个 QListWidgetItem 对象 item1 和 item2。使用 `QVariant::fromValue()` 函数将 MyClass 对象封装为 QVariant 类型。
在获取对象数据时,可以使用 `data()` 函数和 `value<MyClass>()` 函数将 QVariant 转换回 MyClass 类型,然后可以使用 MyClass 类的方法访问对象的属性。
请注意,当使用 `setData()` 设置类对象时,确保 MyClass 类已经包含了默认的拷贝构造函数和赋值运算符,以便正确地处理对象的复制和赋值。
阅读全文