在使用QlistWidget通过循环的方式添加多个item,

每个item中都包含读写按钮,如何才能坐到每个item中读到的数据是不一样的,因为pushButton 对应的槽函数只有一个

img

我的想法加一个map映射,按钮和寄存器控件,这样在pushbutton的槽函数里判断哪个button,然后map到对应寄存器控件,你qt基础挺好的,不用我写代码了吧

为每个item设置objectName,通过name去判断点击的按钮
通过点击槽获取item,这里可以转化成任意的由QWidget继承空间、如QPushButton和QLabel等

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

同时可以设置每个item的数据

QListWidgetItem *pItem = new QListWidgetItem(pListWidget);
 pItem->setData(Qt::UserRole, QVariant::fromValue(user));  // 设置用户数据
 
 void onItemClicked(QListWidgetItem *item) 
{ 
   QVariant variant = item->data(Qt::UserRole); // 获取用户数据 
   User user = variant.value<User>(); 
   qDebug() << "ID : " << user.nID; qDebug() << "Name : " << user.strName;
 }

可以这么干

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //动态添加控件
    QGridLayout *mainLayout = new QGridLayout;
    //初始化所有控件
    for (int i = 0; i < 3; i++)
    {
        QPushButton *btn = new QPushButton("read");
        QLineEdit *le = new QLineEdit("line"+QString::number(i));

        connect(btn, &QPushButton::clicked, [=]() {
            btnClicked(i);
        });

        mainLayout->addWidget(btn, i , 0);
        mainLayout->addWidget(le, i, 1);
    }
    ui->widget->setLayout(mainLayout);
}

MainWindow::~MainWindow()
{
    delete ui;
}
// 自定义函数
void MainWindow::btnClicked(int index)
{
    QGridLayout *m_historyLayout = (QGridLayout *)ui->widget->layout();
    QLineEdit* le = (QLineEdit*)m_historyLayout->itemAtPosition(index, 1)->widget();

    qDebug() << index << le->text();
}

img