Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Гурман от Август 08, 2011, 18:58



Название: Размеры виджета в ячейке таблицы
Отправлено: Гурман от Август 08, 2011, 18:58
Потребовалось встроить свой виджет в ячейку таблицы (делегатов не предлагать, не подходят в данном случае). Сделал его в дизайнере, встроил, все работает, кроме того, что размер виджета не изменяется с размером ячейки. Наверно FAQ, но все никак. При этом в соседних ячейках встроены стандартные виджеты (редактор строки, выпадающий список и т.д.) - у них размеры меняются. И ни в какую не получается - и скомпонован он внутри себя, и size policy expanding. Что ему может быть не так?


Название: Re: Размеры виджета в ячейке таблицы
Отправлено: aliks-os от Август 10, 2011, 11:42
без делегата ни как, а что за проблема встроить ваш виджет как делегат?


Название: Re: Размеры виджета в ячейке таблицы
Отправлено: GreatSnake от Август 10, 2011, 12:07
Есть подозрение, что ui-форму нужно поместить в отдельный виджет со своим лейаутом и уже этот виджет помещать в ячейку.


Название: Re: Размеры виджета в ячейке таблицы
Отправлено: Гурман от Август 10, 2011, 14:57
Цитировать
без делегата ни как, а что за проблема встроить ваш виджет как делегат?

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

а делегат - это здесь совершенно лишнее, без него все остальное отлично работает, делегаты вообще нужны и полезны, когда на много одинаковых ячеек таблицы нужен одинаковый редактор (в этом случае при привязке виджетов получается большой расход ресурсов), а если ячейка такая в таблице одна-две-три, то городить делегатов совершенно ни к чему, это мартышкин труд, бессмысленное кодирование

Цитировать
Есть подозрение, что ui-форму нужно поместить в отдельный виджет со своим лейаутом и уже этот виджет помещать в ячейку.

то есть? ui-форма - и так наследник виджета, и лейаут в нем есть, в какой ее еще виджет помещать?

вот такой виджет:

Код:
                {
                    QSpinBox* spin = new QSpinBox();
                    spin->setRange( INT_MIN, INT_MAX );
                    spin->setValue( tmp.value.toInt() );
                    widget = spin;
                }
ресайзится вместе с ячейкой таблицы

а вот такой:
Код:
                {
                    PathSelector* path = new PathSelector(); // : QWidget, создан в дизайнере
                    path->le()->setText( tmp.value.toString() );
                    widget = path;
                }
почему-то нет, привязываются они оба одним и тем же вызовом
Код:
ui->tableWidget->setCellWidget( row, 1, widget );