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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Квадратный виджет ???  (Прочитано 6115 раз)
SLiDER
Гость
« : Сентябрь 17, 2009, 22:10 »

Собственно как сделать сабж Непонимающий Т.е. что бы при масштабировании виджет оставался квадратным. Перегрузка resizeEvent и последующий ресайз не помогают, так как после этого лэйаут, на котором лежит виджет, сходит с ума и творит чёрте-чё, и даже updateGeometry ему тут не поможет. Есть у кого мысли Непонимающий Гугль говорит что единственный способ помочь моему горю, это сабклассинг QLayout-а, однако у меня какая-то алергия на эту идею.
Записан
Alp
Гость
« Ответ #1 : Сентябрь 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);
}
 
Записан
MoPDoBoPoT
Гость
« Ответ #2 : Сентябрь 18, 2009, 15:44 »

У тебя частный случай этого примера: Создание виджета с высотой, зависящей от ширины
Записан
SLiDER
Гость
« Ответ #3 : Сентябрь 18, 2009, 23:46 »

А что творит лайаут при ресайзе? А у меня ничего не творит

Ну, может я конечно превередничаю но вот эти эффекты я считаю не нормальными ->
Записан
SLiDER
Гость
« Ответ #4 : Сентябрь 18, 2009, 23:50 »

У тебя частный случай этого примера: Создание виджета с высотой, зависящей от ширины

Я видел эту статью, и может у меня руки не из того места растут, но мне неудалось на основе heightForWidth решить мою проблему, результат получается похлеще чем с перегрузкой resizeEvent. Собственно вот прилагаю проекты, если кому удасться сделать нормальный квадратный виджет, может построить себе памятник Улыбающийся
Записан
Alp
Гость
« Ответ #5 : Сентябрь 19, 2009, 00:05 »

А что творит лайаут при ресайзе? А у меня ничего не творит

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


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

Не понял что за лайоут у тебя используется (на первом рисунке грид что ли? а на втором? такое ощущение что другой). Ну вообще какое поведение виджета ожидается? Лучше код.
Записан
SLiDER
Гость
« Ответ #6 : Сентябрь 19, 2009, 00:18 »

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

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

Код одним постом выше. Лэйоут обычный QHBoxLayout, а эффекты которые наблюдаются на скринах, происходят потому, что при ресайзе себя виджет ни как не сообщает об этом своему лэйауту, и тот в святом неведение выделяет под него столько места сколько ему нужно было бы если бы он сам не ресайзился, вот.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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