2013-02-13 68 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 
}