2013-02-13 4 views
0

J'ai une table et chaque ligne du tableau a une case à cocher dans sa première colonne. Je dois le faire pour que je puisse détecter les cases cochées et les supprimer quand on appuie sur un bouton.Qt - Accéder à une case à cocher dans une table

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

Est-ce que cela a été fait correctement? Si oui, comment puis-je accéder aux cases à cocher de chaque rangée?

Répondre

1

Je parle d'un QTableWidget. Vous pouvez utiliser un QList.You enregistrer votre QCheckBox dans ce QList et l'utiliser, quand il y a un changement

Peut-être que vous devriez consulter la documentation

Voici une solution. Je ne peux pas le lancer en ce moment, alors dites-moi s'il vous plaît si ça fonctionne. Veuillez valider la valeur de ligne. Je ne suis pas sûr que ce soit possible, cette ligne peut avoir la valeur -1 lorsque vous supprimez la dernière ligne;)

#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 
} 
Questions connexes