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

QLlistwidget 自定义item 并获取 item上的内容_第1张图片

如上面这个界面 ,添加一个自定义 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 labelList = pwig->findChildren();   

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

void ListWidgetTest::on_listWidget_itemClicked(QListWidgetItem *item)
{
    QWidget* pwig = ui->listWidget->itemWidget(item);  // 获取里面的QWidget

    if (pwig != NULL)
    {
        // 方法一  获取所有
        QList labelList = pwig->findChildren();  // 获取所有的Qlabel
        foreach(QLabel *label, labelList)
        {
            qDebug()<< label->text();

            if(label->objectName() == "label1")
                ui->checkText->setText(label->text());   // 获取表中的值
        }

        // 方法二 findChild获取一个,如果不带参数返回第一个子控件
        QLabel * label =  pwig->findChild("label2");   
        ui->checkText->setText(label->text());   // 获取表中的值
    }
    else
        ui->checkText->setText(item->text());   // 获取表中的值

    // 修改里面的内容
//     QLabel * label =  pwig->findChild();   // 只有一个label 可以用 findchild
//     label->setText(tr("内容已修改"));
}

 

 

 

 

你可能感兴趣的:(qt)