Je veux la taille de la QTableView être la même que la table qu'il contient (et fixe), de sorte qu'il ne dispose pas d'une barre de défilementComment puis-je changer la taille QTableView pour que la zone ne défile plus
Répondre
Qu'est-ce que vous pourrait faire est de calculer vos largeurs de colonnes tableview en fonction des données qu'ils ont (ou vous pouvez simplement appeler resizeColumnToContents pour chaque colonne pour le dimensionner à son contenu). Ensuite, modifiez la largeur de la tableview pour qu'elle soit égale ou supérieure à la largeur totale des colonnes + l'en-tête vertical s'il est affiché. Vous devez également suivre les modifications du modèle et ajuster la largeur de votre vue de table + si l'en-tête horizontal est affiché, vous pouvez suivre les colonnes et redimensionner les événements et les ajuster à nouveau. Ci-dessous un exemple de code pour cela:
initialisation:
// add 3 columns to the tableview control
tableModel->insertColumn(0, QModelIndex());
tableModel->insertColumn(1, QModelIndex());
tableModel->insertColumn(2, QModelIndex());
...
// switch off horizonatal scrollbar; though this is not really needed here
ui->tableView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
// adjust size; see code below
adjustTableSize();
// connect to the horizontal header resize event (non needed if header is not shown)
connect(ui->tableView->horizontalHeader(),SIGNAL(sectionResized(int,int,int)), this,
SLOT(updateSectionWidth(int,int,int)));
// connect to the model's datachange event
connect(ui->tableView->model(), SIGNAL(dataChanged(QModelIndex,QModelIndex)),
this, SLOT(dataChanged(QModelIndex,QModelIndex)));
ajuster la taille tableview:
void MainWindow::adjustTableSize()
{
ui->tableView->resizeColumnToContents(0);
ui->tableView->resizeColumnToContents(1);
ui->tableView->resizeColumnToContents(2);
QRect rect = ui->tableView->geometry();
rect.setWidth(2 + ui->tableView->verticalHeader()->width() +
ui->tableView->columnWidth(0) + ui->tableView->columnWidth(1) + ui->tableView->columnWidth(2));
ui->tableView->setGeometry(rect);
}
changement de modèle de processus
void MainWindow::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
{
adjustTableSize();
}
processus
tête Redimensionnement horizontal
void MainWindow::updateSectionWidth(int logicalIndex, int, int newSize)
{
adjustTableSize();
}
espérons que cette aide, ce qui est
thx mais j'étais déjà capable de le faire. Le seul problème ici est que vous devez prendre en compte la taille de la frontière. Il y a aussi quelque chose qui ne va pas avec les méthodes width() et height() du guérisseur vertical. La méthode width donne une valeur de 0 et la hauteur m'a donné quelque chose comme 259, qui était beaucoup trop grand. –
l'en-tête horizontal donne cependant de bonnes valeurs. –
Dans la même veine, vous pouvez utiliser la fonction 'QHeaderView :: length()': 'viewRect.setWidth (customsItemsView-> horizontalHeader() -> length());' qui a semblé fonctionner pour moi. –
sum(item.sizeHint()+headeroffset+border)
ne fonctionne pas bien pour moi, il y a probablement un espacement entre les éléments, même si la grille est désactivée. Je fis donc le réglage de cette façon:
view->resizeRowsToContents();
view->resizeColumnsToContents();
QAbstractItemModel* model = view->model();
QHeaderView* horHeader = view->horizontalHeader();
QHeaderView* verHeader = view->verticalHeader();
int rows = model->rowCount();
int cols = model->columnCount();
int x = horHeader->sectionViewportPosition(cols-1) + horHeader->offset()
+ horHeader->sectionSize(cols-1) + 1;
int y = verHeader->sectionViewportPosition(rows-1) + verHeader->offset()
+ verHeader->sectionSize(rows-1) + 1;
QPoint p = view->viewport()->mapToParent(QPoint(x,y));
QRect g = view->geometry();
g.setSize(QSize(p.x(),p.y()));
view->setGeometry(g);
devrait fonctionner si la dernière colonne et dernière ligne est visible.
J'ai essayé serge_gubenko réponse mais je n'ai pas travaillé pour moi (en partie parce que je voulais modifier la hauteur et la largeur) ... donc je l'ai modifié; Pour éviter la table redimensionnée par mise en page ou widgets parents vous en aurez besoin:
ui->tableView->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Fixed);
Puis:
ui->tableView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
ui->tableView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
QRect rect = ui->tableView->geometry();
int width = 2,length = 2;
for(int col = 0;col<proxySortModel->columnCount();++col){
if(!ui->tableView->isColumnHidden(col))
width += ui->tableView->columnWidth(col);
}
for(int row =0;row<proxySortModel->rowCount();++row)
length += ui->tableView->rowHeight(row);
rect.setWidth(width);
rect.setHeight(length);
ui->tableView->setGeometry(rect);
J'espère que cela aide quelqu'un.
- 1. Rollovers CSS: comment maintenir la taille "zone de frappe" lorsque l'image cachée est plus grande que la zone d'ancrage
- 2. Comment changer la taille des graphiques
- 3. TTThumbsViewController/TTPhotoView - Changer la taille des légendes?
- 4. Android: Comment changer la taille du RadioButton
- 5. MesureOverride pour retourner plus que la taille disponible?
- 6. changer la taille de l'écran
- 7. Comment changer la taille d'un bouton
- 8. Comment changer la taille de la police dans une zone de texte en html
- 9. UIScrollView ne défile pas
- 10. Comment changer la taille de la police du bouton sans changer la taille du bouton (dans Android)?
- 11. Comment faire pour que la taille d'une vue dépende de la taille d'une autre vue?
- 12. UITableView ne défile pas à la cellule
- 13. Changer la taille de police macvim?
- 14. Comment changer la taille de la bordure d'une seule fenêtre?
- 15. ListActivity ne défile pas
- 16. Comment changer la couleur de la zone de texte Disqus
- 17. Comment faire pour que ListView atteigne la taille du contenu
- 18. UICell Textlabel changer la taille du cadre
- 19. Comment changer la taille du cache bdb dans mysql?
- 20. QTableView - ne pas autoriser l'utilisateur à modifier la cellule
- 21. Comment changer la taille de la police dans jqGrid?
- 22. Les panneaux ne défile pas
- 23. ScrollViewer ne défile pas
- 24. Comment faire pour que la valeur de la zone de texte ne soit pas modifiable
- 25. Comment puis-je changer la taille du cadre?
- 26. L'image de fond UIScrollView défile plus vite que le contenu
- 27. Comment est-ce que je réduis la taille d'un div pour accommoder plus de contenu?
- 28. phpThumb - changer la taille du filigrane
- 29. ListBox ne défile pas correctement
- 30. Comment changer la taille de police sur un bouton?
Je suis surpris qu'il n'y ait pas de méthode intégrée pour faire cela en une ligne. Encore rien depuis '09? Semble quelque chose qui devrait être aussi important que 'resizeColumnsToContents()', qui existe déjà. – neuronet