【发布时间】:2024-01-14 17:22:01
【问题描述】:
我在 Qt Creator 中有一个用作购物清单的 GUI 项目。我正在使用 QLineEdit 将项目添加到 QTableWidget。用户输入内容,按下 QPushButton。然后,该插槽在第一列中向 QTableWidget 添加一个新行,并在第二列中添加一个新的 QPushButton。然后我希望用户能够按下按钮并清除该行,但我不知道如何访问该插槽或发件人(我不确定正确的术语。)这是到目前为止的代码. 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()
然后它看起来像这样,我想让清除按钮删除它所在的行。
我需要创建一个新插槽吗?有什么帮助吗?
【问题讨论】:
-
我需要创建一个新插槽吗? 如果您没有插槽,可以。我看到您正在创建新按钮,但没有将其
clicked()信号连接到 MainWindow 中的插槽。也不要为您创建的新插槽使用on_命名约定,因为这不会是自动连接。 -
@drescherjm,据我了解,他/她正试图将
clicked()信号连接到QTableWidget(或其模型或委托?)的某个插槽,并带有相应的QTableWidgetItem作为输入参数,以便可以编辑/删除该QTableWidgetItem的内容。信号clicked()只能传递bool作为参数,那么他们将如何访问要擦除的行。听起来对吗? -
不不,我已经拥有的 clicked() 信号将用户输入与同一行中的新按钮一起添加到表中。然后我希望用户能够按下按钮并让它清除行。这样,他们可以从表中删除条目。但是我无法预先创建行和按钮,因为我不知道用户将输入多少条目,所以如果按钮在程序运行之前不存在,我不确定如何让按钮执行某些操作。
-
我做了一些修改,希望能更清楚。
-
@Kenta,我提到了
QPushButton的信号clicked(),它是您动态创建的,在您的屏幕截图中称为“清除”。现在有意义吗?
标签: c++ qt qt-creator signals-slots