Qt表小部件,按钮删除行

时间:2017-10-09 08:18:58

标签: c++ qt qt5 qtablewidget qpushbutton

我有一个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);
}

如何以功能知道按下哪个按钮(在哪一行)的方式将我的按钮连接到某个功能?

3 个答案:

答案 0 :(得分:2)

要删除行,我们必须首先获取行,如果我们在单元格中插入小部件,<?php require_once 'db_connect.php'; $output = array('data' => array()); $sql = "SELECT * FROM object"; $query = $connect->query($sql); while ($row = $query->fetch_assoc()) { $output['data'][] = array( $row['name'], ); } 方法将不会返回相应的行,在许多情况下,它将返回最后一个单元格的行而没有小部件已被选中。

出于这个原因,您必须选择其他解决方案,对于这种情况,我们将使用currentRow()的{​​{1}}方法,但为此我们需要知道单元格的像素位置。当一个小部件添加一个小部件时,这个单元格将是小部件的父级,因此我们可以使用indexAt()方法从按钮访问单元格,然后获取单元格相对于单元格的位置QTableWidget并在parent()中使用它。要访问该按钮,我们将使用QTableWidget

当删除当前单元格时,焦点会丢失,可能的解决方案是将焦点重新放在另一个单元格中。

indexAt()

答案 1 :(得分:0)

创建一个自定义类,您可以在其中传递创建的按钮对象和行索引。从您的自定义按钮类,处理按钮按下事件并发出从创建自定义按钮的对象处理的自定义信号(它将携带索引号)。下面是一些相关的代码,为您提供一个提示:

<强>·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);}

答案 2 :(得分:0)

使用此连接方式将信号连接到插槽:

connect(ui->btnDelete, &QPushButton::clicked, this,&MainWindow::deleteRow);

并删除例如一个关于呼叫功能的行:

void MainWindow::deleteRow()
{
    int row = ui->tableWidget->currentRow();
    ui->tableWidget->removeRow(row);
}