Quiero el tamaño de la QTableView a ser la misma que la tabla que contiene (y fijo) de modo que no tiene una barra de desplazamiento¿Cómo puedo cambiar el tamaño QTableView de manera que la zona no se desplaza más
Respuesta
Lo que podría hacer es calcular sus columnas Tableview anchos de acuerdo con los datos que tienen (o simplemente puede llamar resizeColumnToContents para cada columna para que el tamaño de su contenido). A continuación, cambie el ancho de la tabla vista para que sea igual o mayor que el ancho total de las columnas + encabezado vertical si se muestra. También necesitaría hacer un seguimiento de los cambios del modelo y ajustar el ancho de su tabla + si se muestra un encabezado horizontal, puede rastrear columnas, cambiar el tamaño de los eventos y ajustarlos de nuevo. A continuación se muestra un código de ejemplo para esto:
inicialización:
// 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)));
ajustar el tamaño 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);
}
cambio de modelo de proceso
void MainWindow::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
{
adjustTableSize();
}
proceso de cabecera horizontal cambiar el tamaño
void MainWindow::updateSectionWidth(int logicalIndex, int, int newSize)
{
adjustTableSize();
}
esperanza que esta ayuda, que se refiere a
thx pero ya pude hacerlo. El único problema aquí es que debes tener en cuenta el tamaño del borde. También hay algo mal con los métodos width() y height() del healder vertical. El método de ancho da un valor de 0 y la altura me dio algo así como 259, que era demasiado grande. –
el encabezado horizontal tiene buenos valores. –
En la misma línea, se puede utilizar el 'QHeaderView :: longitud()' función: 'viewRect.setWidth (customsItemsView-> horizontalHeader() -> longitud());' que parecía funcionar para mí. –
sum(item.sizeHint()+headeroffset+border)
no funciona bien para mí, es probable que haya espacio entre los elementos, incluso si la rejilla está apagado. Así que hice el ajuste de esta manera:
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);
Debería funcionar si la última columna y la última fila están visibles.
me trataron serge_gubenko respuesta, pero no funcionó para mí (En parte porque quería rezise altura y anchura) ... así que alteré; Para evitar la tabla que se cambia el tamaño de los diseños o widgets padres que va a necesitar esto:
ui->tableView->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Fixed);
continuación:
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);
espero que esto ayude a alguien.
- 1. cómo puedo listview automáticamente el tamaño por lo que no se desplaza
- 2. Java JTextArea que cambia el tamaño y se desplaza automáticamente
- 3. ¿Puedo cambiar una ventana de navegador existente que no se puede cambiar de tamaño con Javascript para que se pueda cambiar el tamaño?
- 4. Android ListView que no se desplaza?
- 5. El ScrollViewer no se desplaza
- 6. La manera más fácil de cambiar la fuente y el tamaño de fuente
- 7. UITextView no aparece hasta que se desplaza
- 8. ¿Cómo puedo cambiar el tamaño de la recaptcha en Greasemonkey?
- 9. ¿Cómo cambiar el tamaño de la imagen para que se ajuste a la celda UITableView?
- 10. UILabel redimensionable que se desplaza por la pantalla
- 11. Cómo puedo evitar que el tamaño de fuente UITextfield se reduzca a medida que escribe
- 12. UIGestureRecognizer que bloquea la vista de tabla que se desplaza
- 13. Obtener ListBox para cambiar el tamaño con la ventana, pero no cambiar el tamaño del contenido
- 14. ¿Cómo puedo cambiar el tamaño de una imagen sin estirarla?
- 15. Cómo asegurarse de que las columnas en QTableView cambian de tamaño al máximo
- 16. cambiar el tamaño del texto (tamaño de fuente) al cambiar el tamaño de la ventana?
- 17. ¿Cómo puedo detectar que el cliente se desplaza hacia la parte superior o inferior de una página web?
- 18. Cambiar el tamaño de la imagen que utiliza Jcrop
- 19. ¿Puedo cambiar el tamaño de la ventana del navegador?
- 20. Cambiar la zona horaria sin cambiar el tiempo en Java
- 21. iTextSharp: ¿Cómo cambiar el tamaño de una imagen para que se ajuste a un tamaño fijo?
- 22. ListView no se desplaza al final, cuando el teclado usa
- 23. UITableView no se desplaza a la celda
- 24. ¿Cambiar el tamaño de la fuente macvim?
- 25. ¿Cómo puedo cambiar el tamaño de pila disponible para Emacs?
- 26. JQUERY si no se desplaza
- 27. UIImageView: ¿Cambiar el tamaño al tamaño de la imagen?
- 28. ¿Cómo puedo cambiar el tamaño de una matriz en C?
- 29. ¿Cómo puedo hacer que el tamaño de la imagen sea más pequeño en un botón?
- 30. ¿Cómo puedo cambiar el tamaño de un SVG?
me sorprende no hay ningún método integrado para realizar esta acción en una sola línea. Todavía nada desde '09? Parece algo que debería ser tan importante como 'resizeColumnsToContents()', que ya existe. – neuronet