Qt::UserRole的使用

Qt::UserRole的使用

  1. 我通过 comboBox为示例来介绍Qt::UserRole的使用。如果要为comboBoxItem添加一些额外的数据(属性)就需要用到Qt::UserRole

设置属性的方法

在这里插入图片描述

获取属性的方法

在这里插入图片描述
一个属性一个属性的去设置

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<People>();
        qDebug() << "name: " << temp.name << "isMale: " << temp.isMale << "Id " << temp.id;
    });

使用自定义的数据类型时。必须将这个类型注册到元系统中去

//在头文件中
Q_DECLARE_METATYPE(People)

QListWidgetItem

setData()设置属性

在这里插入图片描述

data() 获取属性

在这里插入图片描述

    //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<SEX>() == MALE)
        {
            qDebug() << "sex : male";
        }
        else if(item->data(Qt::UserRole).value<SEX>() == FEMALE)
        {
            qDebug() << "sex : female";
        }
    });

枚举类型注册元对象

enum SEX
{
  MALE,
  FEMALE
};

Q_DECLARE_METATYPE(SEX)

转载文章链接

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值