Колонки автоматически изменяют размер QTableView

Я новичок в Qt, и мне только что удалось заставить QTableView работать с моей моделью. Он исправил 3 столбца. Когда я открываю окно, оно выглядит нормально, но когда я изменяю размер окна, размер самого QTableView изменяется, но ширина столбцов остается неизменной. Есть ли встроенный способ заставить его работать? Я хочу, чтобы размер столбцов изменялся, чтобы соответствовать краям QTableView при каждом изменении размера окна.

Ответы

Ответ 1

Существует флаг заголовка, чтобы гарантировать, что последний столбец QTableView заполняет родительский элемент при изменении размера. Вы можете установить его так:

table_view->horizontalHeader()->setStretchLastSection(true);

Однако это не меняет размер других столбцов пропорционально. Если вы хотите это сделать, вы можете обработать его внутри resizeEvent вашего родителя:

void QParent::resizeEvent(QResizeEvent *event) {
    table_view->setColumnWidth(0, this->width()/3);
    table_view->setColumnWidth(1, this->width()/3);
    table_view->setColumnWidth(2, this->width()/3);

    QMainWindow::resizeEvent(event);
}

Класс QParent является подклассом QMainWindow.

Ответ 2

Этот код одинаково растягивает каждый столбец так, чтобы он соответствовал ширине таблицы.

table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

Docs:

Ответ 3

Виджеты QTableView, QTreeView и их производные классы (такие как QTableWidget) имеют два полезных метода:

QHeaderView* horizontalHeader() const;
QHeaderView* verticalHeader() const;

Если вы откроете документацию для класса QHeaderView, вы найдете методы, которые определяют внешний вид и поведение заголовка строки или столбца для позиции. Вы можете решить свою проблему одним из следующих способов:

  • void QHeaderView:: stretchLastSection (bool stretch)
    Как сказал Дэви Джонс.

    Пример:

    QTableView *table = new QTableView();  
    table->horizontalHeader()->setStretchLastSection(true);
    
  • void QHeaderView:: setResizeMode (режим ResizeMode)
    В качестве режима вы можете установить QHeaderView:: Stretch или QHeaderView:: ResizeToContents.
    К сожалению, этот метод имеет недостаток - после его применения вы не сможете изменять размер столбцов (или строк) вручную (в графическом интерфейсе) или программно.

    Пример:

    QTableView *table = new QTableView();  
    table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);