Russian Qt Forum
Сентябрь 30, 2024, 10:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: stretchLastSection 4.2.0  (Прочитано 6147 раз)
noosooth
Гость
« : Октябрь 10, 2006, 01:52 »

Qt 4.2.0 win
В конструкторе потомка QTableView говорю:
Код:
  
horizontalHeader()->setStretchLastSection(true);
horizontalHeader()->setResizeMode(QHeaderView::Interactive);

Как я думал (до 4.2.0) последняя колонка вроде должна занимать все свободное пространство.

Теперь, если уменьшаю горизонтальный размер окна с этим TableView до появления скроллера и  затем перемещаю скроллер до упора вправо - последняя колонка, которая теперь снова "last visible section" ну никак не хочет "takes up all the available space".
Короче, если присутствует горизонтальный скроллер, то справа в таблице - дырка.

Причем ежели сказать этому TableView:
Код:
setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);

Все вроде начинает работать так как и хотелось бы.
(Не считая того, что скроллинг становится попиксельный)

Ткните носом как теперь добиться того, чтобы
horizontalScrollMode был равен QAbstractItemView::ScrollPerItem
и чтобы последняя колонка занимала все пространство (без дыр справа) ?
Записан
bigirbis
Гость
« Ответ #1 : Октябрь 10, 2006, 08:50 »

Цитировать
QHeaderView::Interactive - Don't automatically change the size (let the user do it manually).

ИМХО, с этим флагом не срастется, надо QHeaderView::Stretch.
Записан
noosooth
Гость
« Ответ #2 : Октябрь 10, 2006, 11:40 »

Цитата: "bigirbis"
Цитировать
QHeaderView::Interactive - Don't automatically change the size (let the user do it manually).

ИМХО, с этим флагом не срастется, надо QHeaderView::Stretch.


Во-первых, Ваши сведения несколько устарели, т.к. речь идёт о 4.2.0  :wink:
Цитировать
QHeaderView::Interactive - The user can resize the section. The section can also be resized programmatically using resizeSection(). The section size defaults to defaultSectionSize. (See also cascadingSectionResizes.)


Во-вторых, как минимум странно, что установка режима  "QAbstractItemView::ScrollPerPixel" - приводит к корректному, на мой взгляд, поведению.

В-третьих, QHeaderView::Stretch - мне не подходит.
---------------------------

Вероятно я не вполне корректно спросил.

Имелось ввиду:
 1. Иметь возможность пользователю изменять размер колонок
 2. Делать автоматом 'stretch' последней колонки
 3. Гориз. скроллинг при этом желательно иметь "Per Item"

Полагаю, что возможны как обычно два варианта:
Либо я идиот и меня ткнут носом, либо это regression по сравнению с 4.1.4
Записан
noosooth
Гость
« Ответ #3 : Октябрь 16, 2006, 11:24 »

Вроде как согласились тролли что это   regression.
Записан
QCasper
Гость
« Ответ #4 : Октябрь 18, 2006, 22:26 »

Я так и не понял, в 4.2 реально сделать чтобы хэдерные секции тэйбл виджета автоматически заполняли свободное пространство? Без этого как-то не по джедайски вообще...
Записан
noosooth
Гость
« Ответ #5 : Октябрь 18, 2006, 23:11 »

Проблема о которой я писал выше не проявляется если я задаю таблице (у меня потомок QTableView) попиксельный режим горизонтального скроллинга.
Код:
setHorizontalScrollModeQAbstractItemView::ScrollPerPixel); 

Об этом я тоже троллям писАл, когда репортил bug.
Но этот факт в Task Tracker они почему-то не опубликовали.

to QCasper
А Вы ещё какую-то проблему обнаружили?
Записан
QCasper
Гость
« Ответ #6 : Октябрь 19, 2006, 01:55 »

Цитата: "noosooth"


to QCasper
А Вы ещё какую-то проблему обнаружили?


хм... меня попиксельный режим от проблемы не спасает...
а еще у меня как-то странно работет setRowHeight...
Записан
noosooth
Гость
« Ответ #7 : Октябрь 19, 2006, 10:39 »

Цитата: "QCasper"

хм... меня попиксельный режим от проблемы не спасает...
а еще у меня как-то странно работет setRowHeight...


Надо бы код посмотреть.
А может у нас OS разные? Я только под win проверял.
Записан
QCasper
Гость
« Ответ #8 : Октябрь 19, 2006, 23:22 »

Цитата: "noosooth"
Цитата: "QCasper"

хм... меня попиксельный режим от проблемы не спасает...
а еще у меня как-то странно работет setRowHeight...


Надо бы код посмотреть.
А может у нас OS разные? Я только под win проверял.


так, попиксельный режим вроде как спас, а вот с setRowHeight()...
значит вот код:

Код:
#include <QtGui/QApplication>
#include <qmainwindow.h>
#include <qtablewidget.h>
#include <qheaderview.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QMainWindow w;
QTableWidget *tb = new QTableWidget(&w);
tb->setColumnCount(5);
tb->horizontalHeader()->setStretchLastSection(true);
//tb->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
for (int i=0; i<5; i++) {
tb->insertRow(i);
tb->setRowHeight(i, int(tb->rowHeight(i)*0.7));
}

w.resize(640,480);
w.setCentralWidget(tb);
    w.show();

    a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()));
    return a.exec();
}


предлагается скомпилить его сначала в 4.1.*, потом в 4.2.0, и сравнить два результата. А имеенно обратить внимание на высоту строк.
Записан
noosooth
Гость
« Ответ #9 : Октябрь 20, 2006, 10:41 »

Цитата: "QCasper"
так, попиксельный режим вроде как спас, а вот с setRowHeight()....


4.1.4 win - Полёт нормальный.

4.2.0 win - Высота устанавливается только для последней строки.
(Ну и со скроллингом 'perItem' те же проблемы)

Если в 4.2.0  в Вашем примере я разношу по разным циклам создание строк и установку высоты, то это дело кажется приходит в норму.
Код:
for (int i = 0; i < 5; i++) 
   tb->insertRow(i);
for (int i = 0; i < 5; i++)
   tb->setRowHeight(i, int(tb->rowHeight(i)*0.7));
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.066 секунд. Запросов: 21.