How to show the row where QPushButton is clicked in QTableWidget

后端 未结 2 353
别那么骄傲
别那么骄傲 2021-01-19 14:56

I would like to delete row where QPushButton is clicked how it is possible to I think it is reasonable to use slots but how to do it don\'t know , if you have a

相关标签:
2条回答
  • 2021-01-19 15:24

    When you are creating QPushButton just add :

        btn_delete = new QPushButton("Remove", ui->tableWidget);
        btn_delete->setObjectName(QString("%1").arg(ui->tableWidget->rowCount()));
    
        connect(btn_delete, SIGNAL(clicked()), this,    SLOT(CellButtonDeleteClicked()));
    

    And create function CellButtonDeleteClicked()

         void CellButtonDeleteClicked()
         {
    
          //   by this line I can get the sender of signal
          QPushButton *pb = qobject_cast<QPushButton *>(QObject::sender());
    
          int row = pb->objectName().toInt();
          ui->tableWidget->removeRow(row);
         }
    
    0 讨论(0)
  • 2021-01-19 15:32

    This task can be solved using the removeRow() method but before we must get the row. First of all we will connect all the buttons to a slot inside the loop as shown below:

    *.h

    private slots:
        void onClicked();
    

    *.cpp

    [...]
    QPushButton* btn_edit = new QPushButton();
    btn_edit->setText("Remove");
    connect(btn_edit, &QPushButton::clicked, this, &MainWindow::onClicked);
    [...]
    

    In the slot we can get the button that emits the signal through the sender() method, then we get QWidget parent (created with the name pWidget), this is the widget that is added to the QTableWidget and its position is relative to it, then we use the method indexAt() to get the QModelIndex associated with the cell, and this has the information of the row through the method row(). All of the above is implemented in the following lines:

    void MainWindow::onClicked()
    {
        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);
        }
    }
    

    Note: The setCurrentCell() method is used to set the focus since the last cell that has it has been deleted.

    The complete example can be found in the following link.

    0 讨论(0)
提交回复
热议问题