QComboBox的Item项携带(存储)一个或多个数据

该代码示例展示了如何在Qt中使用QComboBox组件存储额外的数据。一种方法是使用addItem()函数存储单个数据,另一种是通过设置QStandardItemModel来存储多个关联数据,如方案ID、装备ID和数量。当用户选择项时,可以从模型中检索这些数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法

  1. 携带(存储)一个数据:addItem(const QString &text, const QVariant &userData = QVariant())
  2. 携带(存储)多个数据:setModel(QAbstractItemModel *model)

携带(存储)一个数据

  • 主要内容
 // 添加数据
for(auto &var:infos)
{
    ui->comboBox_only->addItem(var.name,var.idFA);
}

 // 获取数据
int     idFA =ui->comboBox_only->currentData().toInt();
QString name =ui->comboBox_only->currentText();

携带(存储)多个数据

  • 主要内容
 // 添加数据
auto pModel = new QStandardItemModel(this);
for(auto &var:infos)
{
    auto pItem = new QStandardItem(var.name);
    pItem->setData(var.idFA,Qt::UserRole);
    pItem->setData(var.equipId,Qt::UserRole+1);
    pItem->setData(var.equipNum,Qt::UserRole+2);
    pModel->appendRow(pItem);
}
qDebug()<<"pModel.rowCount() ="<<pModel->rowCount();
ui->comboBox->setModel(pModel);


 // 获取数据
 auto pModel=qobject_cast<QStandardItemModel *>(ui->comboBox->model());
 if(pModel){
     int     idFA =pModel->data(pModel->index(index,0),Qt::UserRole).toInt();
     QString name=ui->comboBox->currentText();
     QString equipId=pModel->data(pModel->index(index,0),Qt::UserRole+1).toString();
     int     equipNum=pModel->data(pModel->index(index,0),Qt::UserRole+2).toInt();
}

全部内容

#include "uniteitemdata.h"
#include "ui_uniteitemdata.h"
#include <QStandardItemModel>
#include <QStandardItem>
#include <QVector>
#include <QDebug>
#pragma execution_character_set("utf-8")
namespace{
struct Test {
    int     idFA;           //方案ID
    QString name;           //名称
    QString equipId;        //装备ID
    int     equipNum;       //装备数量
};
QVector<Test> infos = {
    {1, "奥迪A6L", "9001",101},
    {2, "宝马X7", "9003",102},
    {3, "迈巴赫S", "9002",103},
    {4, "库里南", "9020",104},
    {5, "丹拿","9002",105},
    {6, "柏林之声", "9004",106},
    {7, "奔驰", "9006",107},
    {8, "林肯", "9008",108},
    };
}

UniteItemData::UniteItemData(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::UniteItemData)
{
    ui->setupUi(this);
    setWindowFlag(Qt::WindowStaysOnTopHint);
    ui->comboBox->clear();
    // 携带(存储)多个数据
    auto pModel = new QStandardItemModel(this);
    for(auto &var:infos)
    {
        auto pItem = new QStandardItem(var.name);
        pItem->setData(var.idFA,Qt::UserRole);
        pItem->setData(var.equipId,Qt::UserRole+1);
        pItem->setData(var.equipNum,Qt::UserRole+2);
        pModel->appendRow(pItem);
    }
    qDebug()<<"pModel.rowCount() ="<<pModel->rowCount();
    ui->comboBox->setModel(pModel);

    // 携带(存储)一个数据
    for(auto &var:infos)
    {
        ui->comboBox_only->addItem(var.name,var.idFA);
    }
    ui->textBrowser->clear();
}

UniteItemData::~UniteItemData()
{
    delete ui;
}



void UniteItemData::on_comboBox_currentIndexChanged(int index)
{
    auto pModel=qobject_cast<QStandardItemModel *>(ui->comboBox->model());
    if(pModel){
        int     idFA =pModel->data(pModel->index(index,0),Qt::UserRole).toInt();
        QString name=ui->comboBox->currentText();
        QString equipId=pModel->data(pModel->index(index,0),Qt::UserRole+1).toString();
        int     equipNum=pModel->data(pModel->index(index,0),Qt::UserRole+2).toInt();
        ui->textBrowser->clear();
        QString str = "-";// 重复30次
        ui->textBrowser->append(str.repeated(15)+"携带(存储)多个数据"+str.repeated(15));
        ui->textBrowser->append(QString("方案ID =")+QString::number(idFA));
        ui->textBrowser->append(QString("名称   =")+QString(name));
        ui->textBrowser->append(QString("装备ID =")+QString(equipId));
        ui->textBrowser->append(QString("装备数量=")+QString::number(equipNum));


    }

}


void UniteItemData::on_comboBox_only_currentIndexChanged(int index)
{
    ui->textBrowser->clear();
    QString str = "-";// 重复30次
    ui->textBrowser->append(str.repeated(15)+"携带(存储)一个数据"+str.repeated(15));
    int     idFA =ui->comboBox_only->currentData().toInt();
    QString name =ui->comboBox_only->currentText();
    ui->textBrowser->append(QString("方案ID =")+QString::number(idFA));
    ui->textBrowser->append(QString("名称   =")+QString(name));
}

效果

在这里插入图片描述

<think>好的,用户问的是“灵动岛是什么”,我需要先弄清楚这个术语的具体含义。首先,灵动岛听起来像是一个科技产品或功能的名字,可能跟智能手机有关。我记得苹果在iPhone 14 Pro系列中推出了一个叫做Dynamic Island的功能,中文翻译可能就是“灵动岛”。我需要确认这一。 接下来,我应该解释灵动岛的基本概念。它位于屏幕顶部的药丸形区域,原本是为了容纳前置摄像头和Face ID传感器而设计的。苹果通过软件将其转化为一个交互式的区域,显示实时活动和通知。这和之前的刘海屏设计不同,更具互动性。 然后需要详细说明它的主要功能,比如显示系统提醒(来电、Face ID验证、充电状态等),实时活动(音乐播放、计时器、导航等),以及交互操作(长按、轻触、滑动等手势)。这些功能让用户无需离开当前应用就能快速访问信息,提升使用效率。 还要提到它的设计理念,即通过软硬件结合,将原本的硬件缺陷转化为实用功能,体现了苹果的创新思维。同时,灵动岛的UI设计会根据内容变化形状和大小,保持视觉上的统一。 最后,可能补充一下适用机型,主要是iPhone 14 Pro和Pro Max,以及后续的iPhone 15系列是否支持。另外,可以提及用户和市场的反响,比如是否受到好评,有没有什么缺,比如适配问题或屏幕空间占用等。 检查是否有遗漏的信息,比如技术细节或与其他品牌的类似功能对比,但用户可能只需要基础介绍,所以保持简洁。确保使用中文,结构清晰,分说明,同时遵循系统级指令中的格式要求,数学公式部分可能用不上,但要注意其他格式规则。</think>### 灵动岛是什么? **灵动岛**(Dynamic Island)是苹果公司为iPhone 14 Pro及后续高端机型设计的一项交互式界面功能,旨在将屏幕顶部的“药丸形”挖孔区域(用于前置摄像头和Face ID传感器)转化为一个动态显示与交互的核心区域。它通过软硬件结合的方式,将原本静态的硬件缺陷转化为动态的信息中心。 --- ### 核心功能与特 1. **实时活动显示** 灵动岛可以动态展示当前后台任务的实时状态,例如: - 音乐播放(显示专辑封面、播放进度) - 通话计时或录音状态 - 导航指示、外卖配送进度 - 充电状态或设备连接提示 $$ \text{例:显示“正在播放:歌曲名 - 艺术家”} $$ 2. **交互式操作** 用户可以通过击、长按或滑动直接与灵动岛互动,无需跳转到对应App: - 轻触展开详细信息(如查看完整歌词) - 长按快速控制功能(如暂停音乐) - 滑动关闭任务 3. **系统通知整合** 将传统弹窗通知转化为更柔和的“气泡”样式,从灵动岛展开,减少对屏幕内容的遮挡。 4. **自适应UI设计** 灵动岛的形态会随内容动态变化,例如: - 来电时扩展为长条形显示通话人信息 - Face ID验证时短暂缩小为圆 --- ### 技术实现原理 - **软硬件协同**:通过OLED屏幕的局部亮度和色彩控制,隐藏挖孔区域的硬件边界。 - **动画过渡**:流畅的形变动画让视觉焦集中在信息本身,而非硬件形态。 --- ### 适配机型 目前支持灵动岛的机型包括: - iPhone 14 Pro / Pro Max - iPhone 15全系列 --- ### 评价与意义 - **创新性**:将硬件限制转化为功能亮,体现了“缺陷设计”的巧思。 - **争议**:部分用户认为其占用屏幕空间,且第三方App适配需时间完善。 - **行业影响**:推动了安卓厂商对类似交互设计的探索(如“灵动胶囊”)。 如果需要进一步了解具体操作或场景示例,可以随时提问!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值