访问运行时生成的按钮的click()插槽 - Qt Creator

时间:2016-03-20 21:49:49

标签: c++ qt qt-creator signals-slots

我在Qt Creator中有一个用作购物清单的GUI项目。我正在使用QLineEdit将项添加到QTableWidget。用户输入内容,按下QPushButton。然后,插槽将第一列中的输入和第二列中的新QPushButton添加到QTableWidget的新行。然后,我希望用户能够按下按钮并清除该行,但我不知道如何访问该插槽或发件人(我不确定正确的术语。)这是到目前为止的代码。 itemList是我的QTableWidget,itemInput是QLineEdit。

void MainWindow::on_btnAddItem_clicked()
{
    ui->itemList->insertRow(ui->itemList->rowCount());
    ui->itemList->setItem((ui->itemList->rowCount())-1,0,new QTableWidgetItem(ui->itemInput->text()));
    QPushButton *clear = new QPushButton("Clear",this);
    ui->itemList->setIndexWidget(ui->itemList->model()->index(ui->itemList->rowCount()-1, 1), clear);
    ui->itemInput->clear();
}

这是程序最初运行的时间。点击按钮后,它会运行on_btnAddItem_clicked()

initial run

然后看起来像这样,我想让清除按钮删除它所属的行。

table entry

我是否需要创建新的广告位?有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

您需要创建自己的按钮类并继承QPushButton。像这样:

class MyButton : public QPushButton {
    public:
    MyButton();
    QTableWidgetItem *titem;
}

在这里你是MainWindow:

void MainWindow::on_btnAddItem_clicked()
{
    ui->itemList->insertRow(ui->itemList->rowCount());
    ui->itemList->setItem((ui->itemList->rowCount())-1,0,new QTableWidgetItem(ui->itemInput->text()));
    MyButton *clear = new MyButton("Clear",this);
    clear->titem = ui->itemList->item(ui->itemList->rowCount()-1, 0);
    connect(clear, SIGNAL(clicked()), SLOT(on_btnClear_Clicked()));
    ui->itemList->setIndexWidget(ui->itemList->model()->index(ui->itemList->rowCount()-1, 1), clear);
    ui->itemInput->clear();
}

void MainWindow::on_btnClear_Clicked()
{
    MyButton *btn = (MyButton*)QObject::sender();
    ui->itemList->removeRow(btn->titem->row());
}

请注意,这只是一步。