Qt-ohjelmointi
Table-View ja QList

Tässä harjoituksessa tutkitaan kuinka luodaan oliolista (QList) ja esitetään tuon listan olioiden data QtableView:ssä. Ja lisäksi kuinka QtableView:stä saadaan valitun solun sisältö. Tarkoituksena on saada aikaan kuva1:n mukainen sovellus.

  1. Luo uusi Qt Widget sovellus (nimeltään QListExample)
  2. Lisää sovellukseen luokka Student, jolla QString tyyppiset jäsenmuuttujat fname ja lname sekä molemmille Getter ja Setter
  3. Muokkaa käyttöliittymä kuva2:n mukaiseksi
    • PushButton (btnShow)
    • Table View(tableStudents)
    • Label(labelResult)
  4. Lisää mainwidow.h:n private osaan rivit
    QList<Student> studentList;
    void addStudents();
    
  5. Ja laita mainwindow.cpp:ssä addStudents-motodiin koodi
    Student obj;
    obj.setFname("Matti"); obj.setLname("Mainio"); studentList.append(obj);
    obj.setFname("Teppo"); obj.setLname("Testi"); studentList.append(obj);
    obj.setFname("Jussi"); obj.setLname("Juonio"); studentList.append(obj);
    
  6. Kutsu MainWindow:n kontsruktorissa metodia addStudents
  7. Luo buttonille clicked event ja sinne koodi
    QStandardItemModel *table_model = new QStandardItemModel(studentList.size(),2);
    table_model->setHeaderData(0, Qt::Horizontal, QObject::tr("Etunimi"));
    table_model->setHeaderData(1, Qt::Horizontal, QObject::tr("Sukunimi"));
    
    for (int row = 0; row < studentList.size(); ++row) {
            QStandardItem *fName = new QStandardItem(studentList[row].getFname());
            table_model->setItem(row, 0, fName);
            QStandardItem *lName = new QStandardItem(studentList[row].getLname());
            table_model->setItem(row, 1, lName);
    }
    
    ui->tableStudents->setModel(table_model);
    
    Huom! Jos edellä muuttujien tyyppi ei ole QString on ne muutettava esim. näin:
    QStandardItem *age = new QStandardItem(QString::number(studentList[row].getAge()));
    
  8. Käytä Refactoria lisätäksesi tarvittavat includet
  9. Designerissa valitse tableStudents ja aseta selectionMode=SingleSelection ja selectionBehavior=SelectItems (kuva3)
  10. Tee tableStudents:lle clicked event ja sinne koodi
    QVariant value=index.sibling(index.row(),index.column()).data();
    QString selected_value=QVariant(value).toString();
    
    ui->labelResult->setText("Valittu "+selected_value);
    
  11. Testaa että sovellus toimii
  12. Edellisen sijaan voi tehdä myös näin
    QItemSelectionModel *select = ui->tableView->selectionModel();
    QString selected_value=select->selectedIndexes().value(0).data().toString();


kuva1


kuva1


kuva1



Toggle Menu