如何从按下按钮的 QListWidget 中删除一行

how to delete a row from the QListWidget in which the button was pressed

如何从 QListWidget 中删除按钮被按下的那一行?我知道要删除一些行 (foto) 有必要导致方法 removeItemWidget 但为此它是必要的 QListWidgetItem 但我不知道如何接收它具有 QWidget 我从发件人 ()

我用来创建字符串的代码:

    QLayout* l = new QHBoxLayout;
    auto le=new QLineEdit;
    le->setMaximumWidth(250);
    l->addWidget( le );
    auto le2=new QLineEdit;
    l->addWidget( le2 );
    QPushButton* btn = new QPushButton( "Х" );
    btn->setObjectName(QString::number(ggg));
    connect( btn, SIGNAL( clicked() ), SLOT( close() ) );
    btn->setFixedWidth(22);
    l->addWidget( btn );
    wgt->setLayout( l );
    QListWidgetItem* item = new QListWidgetItem( ui->listWidget);
    item->setSizeHint( wgt->sizeHint() );
    ui->listWidget->setItemWidget(item,wgt);```

removeItemWidget() 仅从视图中删除该项目,但不会删除它,因此您将发生内存泄漏。我不确定这是否是您想要的,我想不是。但是要从项目中删除小部件,您可以删除小部件,它会自动删除。所以下面的代码也应该删除小部件和行。这是我从你的要求中了解到的。

connect( btn, &QPushButton::clicked, [item, wgt]{ delete wgt; delete item; } );

当然你只能把这一行放在行后

QListWidgetItem* item = new QListWidgetItem( ui->listWidget);

我没有测试过,你可能需要用wgt->deleteLater();代替delete wgt