Qt表小部件,按钮删除行
Qt table widget, button to delete row
我有一个QTableWidget,对于所有行,我在一列按钮上设置了一个setCellWidget。
我想将此按钮连接到删除此行的函数。我尝试了这段代码,但它不起作用,因为如果我只是单击我的按钮,我不会将当前行设置为按钮的行。
ui->tableWidget->insertRow(ui->tableWidget->rowCount());
QPushButton *b = new QPushButton("delete",this);
ui->tableWidget->setCellWidget(ui->tableWidget->rowCount()-1,0,b);
connect(d,SIGNAL(clicked(bool)),this,SLOT(deleteThisLine()));
...
void MainWindow::deleteThisLine()
{
int row = ui->tableWidget->currentRow();
ui->tableWidget->removeRow(row);
}
如何将我的按钮连接到函数,使函数知道按下了哪个按钮(在哪一行)?
要删除该行,我们必须首先获取该行,如果我们在单元格内插入小部件,currentRow()
方法将不会返回相应的行,在许多情况下,它将返回最后一个单元格的行,而没有已选择的小部件。
出于这个原因,您必须选择另一种解决方案,在这种情况下,我们将使用 indexAt()
方法 QTableWidget
,但为此我们需要知道单元格的像素位置。 当一个人将一个小部件添加到单元格时,这个单元格将是小部件的父级,因此我们可以使用 parent()
方法从按钮访问单元格, 然后获取单元格相对于QTableWidget
的位置并在indexAt()
中使用它.要访问该按钮,我们将使用 sender()
.
当当前单元格被移除时,焦点将丢失,可能的解决方案是将焦点再次放置在另一个单元格中。
void MainWindow::deleteThisLine()
{
//sender(): QPushButton
QWidget *w = qobject_cast<QWidget *>(sender()->parent());
if(w){
int row = ui->tableWidget->indexAt(w->pos()).row();
ui->tableWidget->removeRow(row);
ui->tableWidget->setCurrentCell(0, 0);
}
}
使用以下连接方式将信号连接到插槽:
connect(ui->btnDelete, &QPushButton::clicked, this,&MainWindow::deleteRow);
并删除例如调用函数中的行:
void MainWindow::deleteRow()
{
int row = ui->tableWidget->currentRow();
ui->tableWidget->removeRow(row);
}
创建自定义类,在其中传递创建的按钮对象和行索引。在自定义按钮类中,处理按钮按下事件并发出从创建自定义按钮的对象处理的自定义信号(它将携带索引号)。下面是一些相关的代码,给你一个提示:
.h
class mypushbutton {
explicit mypushbutton(QObject *parent = 0, QPushButton *pushbutton = 0, int index = 0);
signal:
void deleteRow(int index);
}
。.cpp
mypushbutton() {
connect(pushbutton, SIGNAL(clicked(bool)), this, SLOT(actionButtonClick(bool)));
}
actionbuttonclicked() { emit deleteRow(index);}
相关文章:
- 如何在我从C++文件中读取后立即删除行
- 从 xtensor 中的视图中删除行
- 从 TXT 文件中删除行不起作用
- 使用正则表达式从文件中删除行注释
- 如何在QT中的QtableView中找到我的按钮的行号
- 从文件MQL4删除行
- 使用自定义模型从Qtreeview删除行
- 分段错误从矩阵中删除行
- Qt表小部件,按钮删除行
- 2D矢量-通过搜索删除行
- Armadillo-在立方体中删除行
- c++从文本文件中删除行(需要解释)
- 从简历垫中删除行或列的最佳方法是什么
- 在QTreeView中插入和删除行
- 如何验证是否已在 SQL 服务器中删除行
- QTextEdit插入和删除行的速度非常慢.无论如何,让它更快
- 如何使用QSqlQueryModel从SQLite数据库中删除行
- 在删除行的正常块之后检测到堆损坏
- 在临时指针上使用"delete"后程序崩溃,即使只剩下新行和删除行?
- Qt AbstractItemModel删除行并删除原因核心