c++ - 如何从 QPushButton 中恢复项目?
问题描述
我用 Qt 框架用 c++ 编写了一个代码。目标是添加包含 QLabel“url”、QLineEdit“名称”和 QPushButton“删除”的行。我添加了一个名为“Add”的 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 函数连接clicked
QPushButton 的信号
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)); });
推荐阅读
- python - 如何使用 flask-sqlalchemy 查询博客文章的类别?
- java - 如何为所有 JUnit 测试创建对象?
- python - 通过重新采样每一行来扩展数据框,使其在熊猫中每个特定行之前和之后都有一个范围
- python - 如何在 Python 代码中修改 HTML 代码?
- amazon-web-services - 带有标签条件的 AWS Secret IAM 策略无法通过 RDS 查询编辑器工作
- bash - 如何在 shell 脚本(sed/awk/etc)中删除多余的 www 子域?
- r - 使用 R 为 KNN 获得不同的结果
- ios - Swift:UICollectionView 中的单选按钮
- c++ - 了解 std::optional 在不同平台上的性能差异
- angular - Angular 7.2.15,由于后退导航,在导航(popstate)之后访问 RestoredState 数据