2010-10-14 24 views
7

Utilisez Qtableview avec QsqlTableModel pour remplir une table de données. Je veux trier la colonne en fonction de la sélection de l'utilisateur sur l'en-tête de la colonne.Qt Qtableview n'obtenant pas de signal pour l'élément d'en-tête en cliquant sur

J'ai essayé la manière indiquée dans QTableView sorting signal? pour obtenir le signal (obtenir l'en-tête horizontale de QTableView et connectez le signal sectionclicked (int index logique). Mais le même signal ne reçoit pas émis lorsque je clique sur en-tête de colonne.

S'il vous plaît trouver le code où la connexion se fait:

variables membre:

QHeaderView *m_horiz_header; 

fichier .cpp

m_sqltablemodel->setTable(tabel_name); 
m_sqltablemodel->setEditStrategy(QSqlTableModel::OnManualSubmit); 
m_sqltablemodel->select(); 

m_horiz_header= m_table_view->horizontalHeader(); 
connect(m_horiz_header, SIGNAL(sectionClicked (int logicalIndex)), 
    this, SLOT(on_sectionClicked (int logicalIndex))); 

fonction d'emplacement pour le tri:

void class::on_sectionClicked (int logicalIndex) 
{ 
    m_horiz_header->setSortIndicator(logicalIndex, Qt::AscendingOrder); 
    m_table_view->sortByColumn(logicalIndex); 
} 

Cette fonction est pas appelé, quand la tête de colonne est cliqué.

Pouvez-vous m'aider s'il vous plaît comment faire ceci, où je me suis trompé?

Merci d'avance.

+0

Rubrique connexe: http://stackoverflow.com/questions/24714130/qt-5-3-qtreeview-clickable-header-data – neuronet

Répondre

7

J'ai eu la raison pour laquelle la connexion de signal a échoué.

Le nom de l'argument ne doit pas être mentionné lors de la connexion. En modifiant le code ci-dessus comme cela, cela a fonctionné.

connect(m_horiz_header, SIGNAL(sectionClicked(int)), this, SLOT(on_sectionClicked(int)));