Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->comboBox->addItem("小明");
QString name = "小明";
bool isMale = true;
int id = 100;
//为 index为0 的item添加数据
ui->comboBox->setItemData(0, name, Qt::UserRole);
ui->comboBox->setItemData(0, isMale, Qt::UserRole + 1);
ui->comboBox->setItemData(0, id, Qt::UserRole + 2);
ui->comboBox->addItem("小美");
name = "小美";
isMale = false;
id = 101;
//为 index为1 的item添加数据
ui->comboBox->setItemData(1, name, Qt::UserRole);
ui->comboBox->setItemData(1, isMale, Qt::UserRole + 1);
ui->comboBox->setItemData(1, id, Qt::UserRole + 2);
ui->comboBox->addItem("小李");
name = "小李";
isMale = true;
id = 102;
//为 index为2 的item添加数据
ui->comboBox->setItemData(2, name, Qt::UserRole);
ui->comboBox->setItemData(2, isMale, Qt::UserRole + 1);
ui->comboBox->setItemData(2, id, Qt::UserRole + 2);
//获取数据
void (QComboBox::*ptr)(int) = &QComboBox::currentIndexChanged;
connect(ui->comboBox, ptr, this, [=](int index){
qDebug() << ui->comboBox->itemData(index, Qt::UserRole + 1).toBool();
});
}
用结构体的方式去设置
//使用结构体
ui->comboBox_2->addItem("小明");
People xiaoming;
xiaoming.name = "小明";
xiaoming.isMale = true;
xiaoming.id = 100;
ui->comboBox_2->setItemData(0, QVariant::fromValue(xiaoming), Qt::UserRole);
ui->comboBox_2->addItem("小美");
People xiaomei;
xiaomei.name = "小美";
xiaomei.isMale = false;
xiaomei.id = 101;
ui->comboBox_2->setItemData(1, QVariant::fromValue(xiaomei), Qt::UserRole);
void (QComboBox::*ptr1)(int) = &QComboBox::currentIndexChanged;
//获取数据
connect(ui->comboBox_2, ptr1, this, [=](int index){
qDebug() << index;
People temp = ui->comboBox_2->itemData(index, Qt::UserRole).value();
qDebug() << "name: " << temp.name << "isMale: " << temp.isMale << "Id " << temp.id;
});
使用自定义的数据类型时。必须将这个类型注册到元系统中去
//在头文件中
Q_DECLARE_METATYPE(People)
//ListWidget setData()接口和data()接口
QListWidgetItem* item1 = new QListWidgetItem(ui->listWidget);
item1->setText("小明");
//item1设置属性
item1->setData(Qt::UserRole, QVariant::fromValue(MALE));
ui->listWidget->addItem(item1);
QListWidgetItem* item2 = new QListWidgetItem(ui->listWidget);
item2->setText("小美");
//item2设置属性
item2->setData(Qt::UserRole, QVariant::fromValue(FEMALE));
ui->listWidget->addItem(item2);
//获取属性
connect(ui->listWidget, &QListWidget::itemPressed, this, [=](QListWidgetItem* item){
if(item->data(Qt::UserRole).value() == MALE)
{
qDebug() << "sex : male";
}
else if(item->data(Qt::UserRole).value() == FEMALE)
{
qDebug() << "sex : female";
}
});
枚举类型注册元对象
enum SEX
{
MALE,
FEMALE
};
Q_DECLARE_METATYPE(SEX)
转载文章链接