如何从QPush按钮恢复项目?

How to recover item from a QPushButton?

本文关键字:恢复 项目 按钮 QPush      更新时间:2023-10-16

我用Qt框架用c ++编写了一段代码。 目标是添加包含QLabel"url",QLineEdit"name"和QPushButton"remove"的行。 我用一个名为"添加"的QPushButton添加该行。

要添加行的部分有效。 代码如下:

name=new QLineEdit("",list);
url=new QLabel("",list);
removeLine=new QPushButton("remove",list);
//list is a QListWidget
hbox=new QHBoxLayout;
hbox->addWidget(name);
hbox->addWidget(url);
hbox->addWidget(removeLine);
widget = new QWidget;
widget->setLayout(hbox);
item=new QListWidgetItem;
item->setSizeHint(QSize(0,50));
list->addItem(item);
list->setItemWidget(item,widget);

当我按下删除按钮时,我希望删除相应的行。 问题是我找不到每个删除按钮的项目。

我尝试了QSignalMapper的方法,但它不起作用。 这是代码:

i = list->currentRow();
signalMappper=new QSignalMapper(this);
connect(signalMappper,SIGNAL(mapped(int)),this,SLOT(removeLineEditLabelAndButton(int)));
connect(removeLine,SIGNAL(clicked()),signalMappper,SLOT(map()));
signalMappper->setMapping(removeLine,i);
//SLOT
void PanoramaWidget::removeLineEditLabelAndButton(int row){
item= list->takeItem(row);
list->removeItemWidget(item);
delete item;
}

你会如何解决这个问题?

可以使用lambda函数连接QPushButtonclicked信号

list = new QListWidget(this);
QLineEdit * name = new QLineEdit("", list);
QLabel * url = new QLabel("", list);
QPushButton * removeLine = new QPushButton("remove", list);
//list is a QListWidget
QHBoxLayout * hbox = new QHBoxLayout;
hbox->addWidget(name);
hbox->addWidget(url);
hbox->addWidget(removeLine);
auto widget = new QWidget;
widget->setLayout(hbox);
auto item = new QListWidgetItem;
item->setSizeHint(QSize(0, 50));
list->addItem(item);
list->setItemWidget(item, widget);
connect(removeLine, &QPushButton::clicked,
[this, item]() {list->takeItem(list->row(item)); });