Populating a TableWidget...Best Way of doing it?



  • I have a data set, in the form of a matrix... column names are people names, row names are certain attributes... each cell could be a list of 3 radio buttons OR a dropdown box. So i was thinking of using a TableWidget for all of this.

    column names are read from file, row names are passed from another function.

    should i use TableWidgetItem to add the cells and information? or use the StandardItemModel to add cells and information?

    and can somebody show me some sample code in adding such information??

    thanks a bunch!



  • I have tried with both TabelWidgetItem and StandardItemModel, both of them dont work....
    @QFile file("../engD.txt");
    if (!file.exists())
    {
    QMessageBox error;
    error.setText("error");
    error.exec();
    }
    if (!file.open(QFile::ReadOnly|QFile::Text))
    {
    qDebug();
    }
    QTextStream stream(&file);
    QString mText;
    while (!stream.atEnd())
    {
    for (int row =0; row<4; row++)
    {
    for (int col =0; col<4;col++)
    {
    mText= stream.readLine();
    QTableWidgetItem *newItem = new QTableWidgetItem;
    newItem->setText(mText);
    ui->tableWidget->setItem(row, col, newItem);
    }
    }
    }

    QStandardItemModel *model = new QStandardItemModel(4,4);
    model->setHeaderData(0,Qt::Horizontal,mText);
    ui->tableWidget->setModel(model);
    file.close(); @



  • First, please re-edit your post an indent your code, it's quite unreadable this way.

    For your actual problem:
    You set the items in your loops and in the end you destroy all the work you've done by setting a new (and empty!) model on your table widget.

    The way to go is:

    Either use [[Doc:QTableWidget]] together with [[Doc:QTableWidgetItem]]s

    Or use [[Doc:QTableView]] together with a [[Doc:QStandardItemModel]]

    You should not mix a QTableWidget with any item model, being it standard or custom.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.