Как убедиться, что размер столбцов в QTableView максимально увеличен

Я не уверен, как спросить это, поэтому не стесняйтесь спрашивать дополнительную информацию.

Кажется, что tableView-> resizeColumnsToContents () будет изменять размер только всех столбцы на основе данных в текущем представлении. Это означает, что если у меня будет больше данных ниже (что больше в смысле количества слов), эти слова будут перенесены (если свойство wordWrap установлено в значение true).

Странная вещь если я прокручиваю вниз и обновляю данные, то tableView будет корректно изменять размер этих столбцов. Похоже, что tableView не знал, что ниже приведен более длинный текст.

Итак, мой вопрос: как я могу убедиться, что эти столбцы имеют максимальный размер на основе всех данных?

Мои коды

QSqlTableModel *model = new QSqlTableModel;
model->setTable("item");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();    
tableResult->setModel(model);    
tableResult->setEditTriggers(QAbstractItemView::NoEditTriggers);    
tableResult->setSelectionBehavior(QAbstractItemView::SelectRows);
tableResult->setSelectionMode(QAbstractItemView::SingleSelection);    
tableResult->resizeColumnsToContents();
tableResult->resizeRowsToContents();

Обновление 1

Я пробовал tableResult-> scrollToBottom () , и его размер будет изменяться только на основе элементов внизу. Поэтому, если в середине есть более длинные слова, эти слова будут завернуты.

Обновление 2

Если кто-то захочет понять, о чем я говорю, просто скачайте этот пример. Вы увидите, что нажатие на кнопку «PushButton» сгенерирует данные, размер которых не будет корректно изменен.

Обновление 3

Возможно, ошибка: https://bugreports.qt.io/browse/QTBUG-9352

28
задан MBach 8 January 2017 в 10:32
поделиться

2 ответа

Мне удалось найти обходной путь для этой проблемы, вам просто нужно скрыть таблицу перед вызовом resizeColumnsToContents () .

Например:

tableResult->setVisible(false);
tableResult->resizeColumnsToContents();
tableResult->setVisible(true);
40
ответ дан 28 November 2019 в 03:15
поделиться

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

tableResult->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents);
6
ответ дан 28 November 2019 в 03:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: