【Qt】QLlistwidget 自定义item 并获取 item上的内容

博客介绍了添加自定义item及用鼠标单击获取其信息的方法。核心是通过选中的item获取里面的QWidget,再从得到的widget上找到需要的子控件,提供了两种找子控件的方法。

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

如上面这个界面 ,添加一个自定义 item(第一行)

1. 自定义item   

// 在item中添加一个lable 和 按钮
QWidget *widget1 = new QWidget(ui->listWidget);
QHBoxLayout *layout = new QHBoxLayout(widget1);
QLabel *lab1 = new QLabel(widget1);
QLabel *lab2 = new QLabel(widget1);
layout->addWidget(lab1);
layout->addWidget(lab2);
layout->addWidget(btn1);
lab1->setText(str);
lab2->setText("aaa");
btn1->setObjectName(QStringLiteral("button1"));   // 设置按钮名称
lab1->setObjectName(QStringLiteral("label1"));   // 设置label名称
lab2->setObjectName(QStringLiteral("label2"));  // 设置label名称
btn1->setText(tr("测试按钮"));
widget1->setLayout(layout);
 
// 添加自定义的item
QListWidgetItem *aItem = new QListWidgetItem(ui->listWidget);
ui->listWidget->addItem(aItem);
aItem->setSizeHint(QSize(0,50));
ui->listWidget->setItemWidget(aItem,widget1);

2. 用鼠标" 单击" 获取自定义控件的信息
核心:   

1.  通过选中的item,  获取里面的QWidget

   QWidget* pwig = ui->listWidget->itemWidget(item); 

2.  从得到的widget上的找到需要的子控件 

     方法一:    QList<QLabel*> labelList = pwig->findChildren<QLabel*>();   

     方法二:    QLabel * label = pwig->findChild<QLabel *>("label2");

void ListWidgetTest::on_listWidget_itemClicked(QListWidgetItem *item)
{
    QWidget* pwig = ui->listWidget->itemWidget(item);  // 获取里面的QWidget
 
    if (pwig != NULL)
    {
        // 方法一  获取所有
        QList<QLabel*> labelList = pwig->findChildren<QLabel*>();  // 获取所有的Qlabel
        foreach(QLabel *label, labelList)
        {
            qDebug()<< label->text();
 
            if(label->objectName() == "label1")
                ui->checkText->setText(label->text());   // 获取表中的值
        }
 
        // 方法二 findChild获取一个,如果不带参数返回第一个子控件
        QLabel * label =  pwig->findChild<QLabel *>("label2");   
        ui->checkText->setText(label->text());   // 获取表中的值
    }
    else
        ui->checkText->setText(item->text());   // 获取表中的值
 
    // 修改里面的内容
//     QLabel * label =  pwig->findChild<QLabel *>();   // 只有一个label 可以用 findchild
//     label->setText(tr("内容已修改"));
}


--------------------- 
作者:chen1231985111 
来源:CSDN 
原文:https://blog.csdn.net/chen1231985111/article/details/86304481 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值