如何从按下按钮的 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
。
如何从 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
。