2015-07-18 2 views
0

Im essayant d'afficher un QListView dans un QTableView donc je créé un délégué et en cas de peinture i neQt Intégrer QListView dans QTableView

QListWidget list; 
list.addItem(index.data().toString()); 
list.addItems({"1", "2", "3", "4"}); 
list.resize(option.rect.width(), option.rect.height()); 

painter->save(); 
painter->setClipRect(option.rect); 
painter->translate(option.rect.topLeft()); 
list.render(painter); 
painter->restore(); 

et pour obtenir la taille correcte sizeHint je fais:

QListWidget list; 
list.addItem(index.data().toString()); 
list.addItems({"1", "2", "3", "4"}); 
return list.size(); 

cela rendra la liste mais je ne peux pas utiliser la barre de défilement et la taille de la cellule ne change pas pour afficher la liste complète. Est-il possible d'obtenir Qt pour le rendre correctement?

Répondre

1

Je pense qu'il est difficile de réaliser ce que vous voulez. Il suffit d'utiliser setIndexWidget. Par exemple:

QListWidget *list = new QListWidget; 
list->addItems({"1", "2", "3", "4"}); 

QTableView *table = new QTableView; 
QStandardItemModel *model = new QStandardItemModel(10,10); 
table->setModel(model); 
table->setIndexWidget(table->model()->index(0,0), list); 
table->resizeRowsToContents(); 
table->show(); 

Dans ce cas, il est un widget avec défilement et autres fonctions support.

Modifier.

Oui, bien sûr. Voir un autre exemple:

QListWidget *list = new QListWidget; 
list->addItems({"1", "2", "3", "4"}); 

QTableView *table = new QTableView; 
QStandardItemModel *model = new QStandardItemModel(10,10); 

QStandardItem *it1 = new QStandardItem("example1"); 
QStandardItem *it2 = new QStandardItem("example2"); 

model->setItem(1,0,it1); 
model->setItem(2,0,it2); 

table->setModel(model); 
table->setIndexWidget(table->model()->index(0,0), list); 
table->resizeRowsToContents(); 
table->show(); 

for(int i = 0; i < model->rowCount(); i++) 
{ 
    qDebug() << table->model()->index(i,0).data(); 
} 

Sortie:

QVariant(Invalid) //because it is a widget, there is no data in display role 
QVariant(QString, "example1") //our data 
QVariant(QString, "example2") 
QVariant(Invalid) //because we didn't set data and so on... 
QVariant(Invalid) 
... 
+0

si je fais ça que je peux utiliser la méthode de données de mon TableView à rtrieve les données du TableModel? parce que je veux que les données dans la liste dépendent de TableModel – ACB

+0

@ACB Pourquoi pas? Oui bien sûr! S'il vous plaît voir ma réponse éditée. – Chernobyl