[QT] QTableView - zmiana nazwy kolumny

0

Witam. Próbuje zmienić nazwy kolumny wczytywanej z bazy sqlite w sposób:

    model = new QSqlTableModel(this);
    model->setTable("people");
    model->setHeaderData(1, Qt::Horizontal, tr("a"));
    model->setHeaderData(2, Qt::Horizontal, tr("b"));
    model->setHeaderData(3, Qt::Horizontal, tr("c"));
    model->setHeaderData(4, Qt::Horizontal, tr("d"));
    model->select();
    tableView->setModel(model);

    tableView->setAlternatingRowColors(true);
    tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    tableView->setShowGrid(true);
    tableView->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
    tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
    tableView->setSelectionMode(QAbstractItemView::SingleSelection);
    tableView->resizeColumnsToContents();

    for( int i = 0; i < 31; ++i )
     tableView->setColumnHidden(i, true);

    tableView->setColumnHidden(0, false); 
    tableView->setColumnHidden(1, false); 
    tableView->setColumnHidden(2, false); 
    tableView->setColumnHidden(3, false); 
    tableView->setColumnHidden(4, false);
    tableView->setColumnHidden(9, false); 
    tableView->setColumnHidden(10, false); 
    tableView->setColumnHidden(15, false); 

Niestety nie działa to w moim programie(a w przykladowym pamiętam, że działało). Wiem, że to pytanie do wróżek, ale jakie mogą być powody, że nie uaktualnia mi nazw? Program ma sporo kodu i nie jestem w stanie zamieścić całego kodu;/ Z góry dziękuje za jakieś porady, bo męcze się z tym detalem już sporo czasu. Pozdrawiam:)

0

Użyj tych swoich nazw kolumn przy użyciu setHeaderData() już po wywołaniu select(),ewentualnie po ustawieniu tegoż modelu w widoku.

0

Gdzie bym tego nie użył, zmiana nie jest widoczna. Tak jakby w którymś momencie nadpisywało moje nazwy, ale nawet nie wiem gdzie tego szukać;/

0

to view->update()/repaint(),ewentualnie view->vievport()->update/repaint
EDIT:
No tak jak myślałem,takie coś należy po użyciu select() zrobić.Weź wykomentuj ile wlezie kodu,np te wszystkie setShowGrigy,alternatingRowsColors itd i obacz,czy zadziała w takiej postaci:

    model = new QSqlTableModel(this);
    model->setTable("people");
    model->select();
    model->setHeaderData(1, Qt::Horizontal, tr("a"));
    model->setHeaderData(2, Qt::Horizontal, tr("b"));
    model->setHeaderData(3, Qt::Horizontal, tr("c"));
    model->setHeaderData(4, Qt::Horizontal, tr("d"));

    tableView->setModel(model);
    tableView->show();
0

Wykomentowałem co niepotrzebne, kod dawałem w różnych miejscach, a nazwy kolumn tak jak się niezmienialy, tak nadal się nie zmieniają. Może jakieś pomysły jak zmienić te nazwy w inny sposób? Dziękuje za odpowiedzi i poświęcony czas.

0

Kurrde,niemożliwe,niejeden program używający baz danych w Qt napisałem,i takich cyrków nie widziałem.Hmmmm...jakiej wersji Qt używasz?Na pewno stabilnej?

A taki sposób desperacki dosyć to napisać własny model dziedziczący QSqlTableModel i przeimplementować mu funkcje headerData tak żeby na pałę zwracało stringi takie jakie chcesz mieć w zależności od indeksu kolumny i setHeaderData tak,żeby nic nie robiło.

0

Znalazłem przyczyne. Nazwy wracały do stanardowych po dodawaniu danych:

    model->insertRows(row, 1);
    model->setData(model->index(row, 1),  name);
 model->submitAll();
model->select();

Zapewne głupi błąd, ale trochę czasu mi zajęło znalezienie go...

@MasterBLB Dziękuje za pomoc, sugestia aby wykomentować co się da przyniosła skutek:) Na początku zapomniałem o metodzie która dodaje dane do tabeli, bo wywołuje ją poza klasą;/ Jeszcze raz dziękuje i pozdrawiam:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1