Всем добрый вечер.
Подскажите как быть: имеется QGridLayout на основной форме, внутри ячеек компоновщика нужно разместить по одному квадратному(!) виджету так, чтобы:
- при масштабировании основной формы менялись размеры виджетов в ячейках (при сохранении квадратных пропорций)
- виджеты были центрированы относительно ячеек
Пока не получается выполнить два условия одновременно. Такое ощущение, что я вообще что-то не так делаю.
Размещение виджетов в компоновщике выглядит следующим образом:
QWidget *workspace = new QWidget(this);
setCentralWidget(workspace);
QGridLayout *grid = new QGridLayout(workspace);
grid->setRowStretch(0,1);
grid->setColumnStretch(0,1);
grid->setRowStretch(1,6500);
grid->setColumnStretch(1,1);
grid->setRowStretch(2,6500);
Figure *f1 = new Figure;
Figure *f2 = new Figure;
grid->addWidget(f1, 0,0);
grid->addWidget(f2, 0,1);
Виджеты делаю квадратными через переопределение heightForWidth(). Для наглядности пропорций вдоль границ виджета рисую рамку:
Figure::Figure(QWidget *parent) : QWidget(parent)
{
setWindowFlags(Qt::FramelessWindowHint);
QSizePolicy policy(QSizePolicy::Preferred, QSizePolicy::Preferred);
policy.setHeightForWidth(1);
setSizePolicy(policy);
setBaseSize(180,180);
setMinimumSize(180,180);
resize(180, 180);
}
void Figure::paintEvent(QPaintEvent *)
{
QPainter paint(this);
QRect r = geometry();
int w=r.width();
int h=r.height();
paint.drawRect(3, 3, w-5, h-5);
updateGeometry();
}
int Figure::heightForWidth(int w) const
{
QRect r = geometry();
if(w > r.height()) r.setHeight(w);
return w;
}
Как это выглядит: при пропорциональном изменении основной формы по высоте/ширине все ок - вижу квадраты. При растягивании в высоту тоже. А вот при растягивании формы в ширину квадраты становятся прямоугольниками. Короче говоря, виджеты полностью заполняют все пространство ячеек, не центрируются, квадратные пропорции при растягивании в ширину нарушаются.
Пробовал так:
grid->addWidget(f1, 0,0, Qt::AlignCenter);
grid->addWidget(f2, 0,1, Qt::AlignCenter);
Виджеты центрируются, но пропорций не меняют.