Я не уверен, как спросить это, поэтому не стесняйтесь спрашивать дополнительную информацию.
Кажется, что 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
Мне удалось найти обходной путь для этой проблемы, вам просто нужно скрыть таблицу перед вызовом resizeColumnsToContents ()
.
Например:
tableResult->setVisible(false);
tableResult->resizeColumnsToContents();
tableResult->setVisible(true);
Я думаю, это потому, что QSqlTableModel загружает данные по запросу, а представление вычисляет ширину столбцов только на основе доступных данных. Если вам не нужно изменять размер столбцов, вы можете попробовать следующее:
tableResult->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents);