Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: noosooth от Октябрь 10, 2006, 01:52



Название: stretchLastSection 4.2.0
Отправлено: 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
и чтобы последняя колонка занимала все пространство (без дыр справа) ?


Название: stretchLastSection 4.2.0
Отправлено: bigirbis от Октябрь 10, 2006, 08:50
Цитировать
QHeaderView::Interactive - Don't automatically change the size (let the user do it manually).

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


Название: stretchLastSection 4.2.0
Отправлено: noosooth от Октябрь 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


Название: stretchLastSection 4.2.0
Отправлено: noosooth от Октябрь 16, 2006, 11:24
Вроде как согласились тролли что это   regression (http://www.trolltech.com/developer/task-tracker/index_html?id=133849&method=entry).


Название: stretchLastSection 4.2.0
Отправлено: QCasper от Октябрь 18, 2006, 22:26
Я так и не понял, в 4.2 реально сделать чтобы хэдерные секции тэйбл виджета автоматически заполняли свободное пространство? Без этого как-то не по джедайски вообще...


Название: stretchLastSection 4.2.0
Отправлено: noosooth от Октябрь 18, 2006, 23:11
Проблема о которой я писал выше не проявляется если я задаю таблице (у меня потомок QTableView) попиксельный режим горизонтального скроллинга.
Код:
setHorizontalScrollModeQAbstractItemView::ScrollPerPixel); 

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

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


Название: stretchLastSection 4.2.0
Отправлено: QCasper от Октябрь 19, 2006, 01:55
Цитата: "noosooth"


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


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


Название: stretchLastSection 4.2.0
Отправлено: noosooth от Октябрь 19, 2006, 10:39
Цитата: "QCasper"

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


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


Название: stretchLastSection 4.2.0
Отправлено: QCasper от Октябрь 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, и сравнить два результата. А имеенно обратить внимание на высоту строк.


Название: stretchLastSection 4.2.0
Отправлено: noosooth от Октябрь 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));