Название: QSplitter, QListView и их ресайз. Отправлено: Visario от Июля 23, 2008, 15:16 Есть QSplitter и он контролирует кастомного QListView.
При этом gridSize подстраивается под высоту этого view в resizeEvent(), и если сделать view->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded), то иногда возникает бесконечный цикл: 0. убирается скроллбар, так как все элементы влезают 1. gridSize увеличивается, т.к. места стало больше 2. контент перестает влезать и пояляется скроллбар 3. gridSize уменьшается и возвращаемся к пункту 0. Пробовал делать setSizes() сплиттеру, когда размер оказывался в "опасной зоне", но это выглядело ужасно, так как сплиттер все еще в движении и курсор мыши все еще над "опасной зоной". Перегрузка moveSplitter и closestLegalPosition тоже не помогла, так как они не виртуальны =( Как лучше разрулить эти ситуацию? Название: Re: QSplitter, QAbstractItemView и их ресайз. Отправлено: pastor от Июля 23, 2008, 22:21 Былобы неплохо увидеть код, и воспроизвесть все это у себя
Название: Re: QSplitter, QAbstractItemView и их ресайз. Отправлено: ритт от Июля 23, 2008, 23:15 а имеет ли смысл менять gridSize сразу по изменении размеров? может сделать это отложенным методом (по таймеру, например) ? - и циклить тогда не будет
Название: Re: QSplitter, QAbstractItemView и их ресайз. Отправлено: Visario от Июля 24, 2008, 08:13 Былобы неплохо увидеть код, и воспроизвесть все это у себя Код: #include <QtCore> После запуска, нужно немного уменьшить высоту, чтобы все элементы влезли. Название: Re: QSplitter, QAbstractItemView и их ресайз. Отправлено: Visario от Июля 24, 2008, 08:28 а имеет ли смысл менять gridSize сразу по изменении размеров? может сделать это отложенным методом (по таймеру, например) ? - и циклить тогда не будет Смысл менять gridSize сразу есть. Не пробовал с таймером, но думаю, что это не поможет, т.к. размер будет скакать по таймеру. Тут нужно как-то избежать определенных размеров (optSize = width() / rowCount() < height() < optSize + sbExt). В примере сверху можно было бы просто вызвать resize() с безопасным размером, но со сплиттером это не поможет. Пофиксенная версия main функции: Код: int main(int argc, char *argv[]) { |