Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: SLiDER от Сентябрь 17, 2009, 22:10



Название: Квадратный виджет ???
Отправлено: SLiDER от Сентябрь 17, 2009, 22:10
Собственно как сделать сабж ??? Т.е. что бы при масштабировании виджет оставался квадратным. Перегрузка resizeEvent и последующий ресайз не помогают, так как после этого лэйаут, на котором лежит виджет, сходит с ума и творит чёрте-чё, и даже updateGeometry ему тут не поможет. Есть у кого мысли ??? Гугль говорит что единственный способ помочь моему горю, это сабклассинг QLayout-а, однако у меня какая-то алергия на эту идею.


Название: Re: Квадратный виджет ???
Отправлено: Alp от Сентябрь 17, 2009, 23:23
А что творит лайаут при ресайзе? А у меня ничего не творит:
Код
C++ (Qt)
#ifndef QSQUAREWIDGET_H
#define QSQUAREWIDGET_H
 
#include <QFrame>
 
class QSquareWidget : public QFrame
{
public:
   QSquareWidget(QWidget *parent = 0);
 
protected:
   virtual void resizeEvent(QResizeEvent*);
};
 
#endif // QSQUAREWIDGET_H
 
 

Код
C++ (Qt)
#include "QSquareWidget.h"
 
#include <QResizeEvent>
#include <QDebug>
 
QSquareWidget::QSquareWidget(QWidget *parent) :
       QFrame(parent)
{
   setFrameStyle(1);
   resize(40, 40);
   //setFixedSize(40, 40);
}
 
void QSquareWidget::resizeEvent(QResizeEvent* event)
{
   int lesser = std::min(event->size().width(), event->size().height());
   resize(lesser, lesser);
   //setFixedSize(lesser,lesser);
}
 


Название: Re: Квадратный виджет ???
Отправлено: MoPDoBoPoT от Сентябрь 18, 2009, 15:44
У тебя частный случай этого примера: Создание виджета с высотой, зависящей от ширины (http://www.crossplatform.ru/?q=node/227)


Название: Re: Квадратный виджет ???
Отправлено: SLiDER от Сентябрь 18, 2009, 23:46
А что творит лайаут при ресайзе? А у меня ничего не творит

Ну, может я конечно превередничаю но вот эти эффекты я считаю не нормальными ->


Название: Re: Квадратный виджет ???
Отправлено: SLiDER от Сентябрь 18, 2009, 23:50
У тебя частный случай этого примера: Создание виджета с высотой, зависящей от ширины (http://www.crossplatform.ru/?q=node/227)

Я видел эту статью, и может у меня руки не из того места растут, но мне неудалось на основе heightForWidth решить мою проблему, результат получается похлеще чем с перегрузкой resizeEvent. Собственно вот прилагаю проекты, если кому удасться сделать нормальный квадратный виджет, может построить себе памятник :)


Название: Re: Квадратный виджет ???
Отправлено: Alp от Сентябрь 19, 2009, 00:05
А что творит лайаут при ресайзе? А у меня ничего не творит

Ну, может я конечно превередничаю но вот эти эффекты я считаю не нормальными ->


Со скринщотами понятнее не стало. Рабочий пример кода можешь выложить? Что будет если мой пример вставить в ресайзЭвент твоего контрола?

Не понял что за лайоут у тебя используется (на первом рисунке грид что ли? а на втором? такое ощущение что другой). Ну вообще какое поведение виджета ожидается? Лучше код.


Название: Re: Квадратный виджет ???
Отправлено: SLiDER от Сентябрь 19, 2009, 00:18
Со скринщотами понятнее не стало. Рабочий пример кода можешь выложить? Что будет если мой пример вставить в ресайзЭвент твоего контрола?

Не понял что за лайоут у тебя используется (на первом рисунке грид что ли? а на втором? такое ощущение что другой). Ну вообще какое поведение виджета ожидается? Лучше код.

Код одним постом выше. Лэйоут обычный QHBoxLayout, а эффекты которые наблюдаются на скринах, происходят потому, что при ресайзе себя виджет ни как не сообщает об этом своему лэйауту, и тот в святом неведение выделяет под него столько места сколько ему нужно было бы если бы он сам не ресайзился, вот.