Колонки автоматически изменяют размер 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);