gpt4 book ai didi

c++ - QTableWidget中如何显示QPushButton被点击的那一行

转载 作者:搜寻专家 更新时间:2023-10-31 02:09:41 26 4
gpt4 key购买 nike

我想删除点击 QPushButton 的行 我认为使用插槽是合理的,但不知道如何操作,如果您有任何想法如何获取一行选定的按钮,请分享,谢谢。

这是我的 table

这是我向 QTableWidget 添加行的代码

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
for(int i = 0; i<20;i++)
ui->tableWidget->insertRow(ui->tableWidget->rowCount());
QVector<QString>vec;
vec<<"first"<<"sec"<<"third"<<"for"<<"fif"<<"first"<<"sec"
<<"third"<<"for"<<"fif";
vec<<"first"<<"sec"<<"third"<<"for"<<"fif"<<"first"<<"sec"
<<"third"<<"for"<<"fif";
for(int i = 0; i<ui->tableWidget->rowCount();i++)
{
for(int j = 0; j<ui->tableWidget->columnCount();j++)
{
if(j == 0)
{
QWidget* pWidget = new QWidget();
QPushButton* btn_edit = new QPushButton();
btn_edit->setText("Remove");
QHBoxLayout* pLayout = new QHBoxLayout(pWidget);
pLayout->addWidget(btn_edit);
pLayout->setAlignment(Qt::AlignCenter);
pLayout->setContentsMargins(0, 0, 0, 0);
pWidget->setLayout(pLayout);
ui->tableWidget->setCellWidget(i, j, pWidget);
continue;

}
QTableWidgetItem*item = new QTableWidgetItem(vec[i]);
item->setFlags(item->flags() ^ Qt::ItemIsEditable);
ui->tableWidget->setItem(i, j, item);
}
}
}

最佳答案

这个任务可以使用 removeRow() 来解决方法,但在此之前我们必须获取该行。首先,我们将所有按钮连接到循环内的一个插槽,如下所示:

*.h

private slots:
void onClicked();

*.cpp

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

在槽中我们可以通过sender()得到发出信号的按钮方法,然后我们得到 QWidget parent(用名称 pWidget 创建),这是添加到 QTableWidget 的小部件,它的位置是相对于它的,然后我们使用方法 indexAt()获取与单元格关联的QModelIndex,这通过方法row() 具有行的信息.以上所有内容都在以下几行中实现:

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

注意: setCurrentCell()方法用于设置焦点,因为最后一个单元格已被删除。

完整的例子可以在下面的link中找到.

关于c++ - QTableWidget中如何显示QPushButton被点击的那一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46329431/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com