2013-02-13 79 views
0

我有一个表格,表格中的每一行在第一列都有一个复选框。我需要这样做才能检测出哪些复选框被选中,并在按下按钮时删除这些行。Qt - 访问表格中的复选框

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

我说的是QTableWidget。您可以使用QList.You保存QCheckBox到这个的QList和使用它,当有一些变化

也许你应该检查出的文档

  • QTableWidget的:Link
  • 的QList:Link

这是一个解决方案。我目前无法运行它,所以请告诉我它是否有效。请验证行值。我不确定是否有可能,当删除最后一行时,该行可以具有值-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 
}