如上面这个界面 ,添加一个自定义 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("内容已修改"));
}