Qt - 访问表格中的复选框

时间:2013-02-13 08:49:43

标签: c++ qt qwidget qtablewidget qcheckbox

我有一张表,表格中的每一行都有一个复选框,在第一列中。我需要这样做,以便我可以检测选中的复选框,并在按下按钮时删除这些行。

QWidget * chkWidget = new QWidget();
QHBoxLayout *center = new QHBoxLayout();
center->setAlignment( Qt::AlignCenter );
center->addWidget( new QCheckBox );
chkWidget->setLayout( center );
ui->data_table->setCellWidget(rowCount,0, chkWidget);

这样做对吗?如果是这样,我如何访问每行的复选框?

1 个答案:

答案 0 :(得分:1)

我谈的是QTableWidget。您可以使用QList。您可以将QCheckBox保存到此QList中并在有更改时使用它

也许你应该查看文档

这是一个解决方案。我现在无法运行它,所以请告诉我它是否有效。请验证行值。我不确定是否可能,当您删除最后一行时,该行的值可以为-1;)

#include "TestTableWidget.h"
#include "ui_TestTableWidget.h"

TestTableWidget::TestTableWidget(QWidget *parent) : QMainWindow(parent), ui(new Ui::TestTableWidget)
{
    ui->setupUi(this);

    tableWidget = new QTableWidget(this);
    tableWidget->setColumnCount(1); // Just an example

    ui->gridLayout->addWidget(tableWidget);

    connect(tableWidget, SIGNAL(itemSelectionChanged()), this, SLOT(slotChange()));

    for(int i = 1; i < 10; i++)
    {
        addRow("Row " + QString::number(i));
    }
}

TestTableWidget::~TestTableWidget()
{
    delete ui;
}

void TestTableWidget::addRow(QString text)
{
    int row = tableWidget->rowCount();
    qDebug() << "Current row count is " + QString::number(row);

    // Add new one
    QTableWidgetItem *item = new QTableWidgetItem(text);
    tableWidget->insertRow(row);
    tableWidget->setItem(row, 0, item);

    // Add item to our list
}

void TestTableWidget::slotChange()
{
    int row = tableWidget->currentRow();
    qDebug() << "Change in table. Current row-index: " + QString::number(row);
    // This value is zero-based, so you can use it in our list
}