1 #include "widgetresizer.h" 2 #include "common/unused.h" 3 #include <QMouseEvent> 4 #include <QDebug> 5 #include <QLayout> 6 WidgetResizer(QWidget * parent)7WidgetResizer::WidgetResizer(QWidget *parent) : 8 QWidget(parent) 9 { 10 init(); 11 } 12 ~WidgetResizer()13WidgetResizer::~WidgetResizer() 14 { 15 } 16 WidgetResizer(const Qt::Orientation & orientation,QWidget * parent)17WidgetResizer::WidgetResizer(const Qt::Orientation& orientation, QWidget* parent) : 18 QWidget(parent), orientation(orientation) 19 { 20 init(); 21 } 22 init()23void WidgetResizer::init() 24 { 25 updateCursor(); 26 updateWidth(); 27 widgetMinimumSize = QSize(20, 20); 28 } 29 getOrientation() const30Qt::Orientation WidgetResizer::getOrientation() const 31 { 32 return orientation; 33 } 34 setOrientation(const Qt::Orientation & value)35void WidgetResizer::setOrientation(const Qt::Orientation& value) 36 { 37 orientation = value; 38 updateCursor(); 39 } 40 updateCursor()41void WidgetResizer::updateCursor() 42 { 43 switch (orientation) 44 { 45 case Qt::Horizontal: 46 setCursor(Qt::SplitHCursor); 47 break; 48 case Qt::Vertical: 49 setCursor(Qt::SplitVCursor); 50 break; 51 } 52 } 53 updateWidth()54void WidgetResizer::updateWidth() 55 { 56 setMinimumSize(width, width); 57 } 58 mousePressEvent(QMouseEvent * event)59void WidgetResizer::mousePressEvent(QMouseEvent* event) 60 { 61 UNUSED(event); 62 if (!widget) 63 return; 64 65 dragStartPosition = QCursor::pos(); 66 dragStartSize = widget->size(); 67 } 68 mouseMoveEvent(QMouseEvent * event)69void WidgetResizer::mouseMoveEvent(QMouseEvent* event) 70 { 71 UNUSED(event); 72 if (!widget) 73 return; 74 75 switch (orientation) 76 { 77 case Qt::Horizontal: 78 handleHorizontalMove(QCursor::pos().x()); 79 break; 80 case Qt::Vertical: 81 handleVerticalMove(QCursor::pos().y()); 82 break; 83 } 84 } 85 handleHorizontalMove(int position)86void WidgetResizer::handleHorizontalMove(int position) 87 { 88 int newWidth = dragStartSize.width() + position - dragStartPosition.y(); 89 if (newWidth < widgetMinimumSize.width()) 90 return; 91 92 widget->setFixedWidth(newWidth); 93 } 94 handleVerticalMove(int position)95void WidgetResizer::handleVerticalMove(int position) 96 { 97 int newHeight = dragStartSize.height() + position - dragStartPosition.y(); 98 if (newHeight < widgetMinimumSize.height()) 99 return; 100 101 widget->setFixedHeight(newHeight); 102 } 103 getWidth() const104int WidgetResizer::getWidth() const 105 { 106 return width; 107 } 108 setWidth(int value)109void WidgetResizer::setWidth(int value) 110 { 111 width = value; 112 } 113 getWidget() const114QWidget* WidgetResizer::getWidget() const 115 { 116 return widget; 117 } 118 setWidget(QWidget * value)119void WidgetResizer::setWidget(QWidget* value) 120 { 121 widget = value; 122 } 123 getWidgetMinimumSize() const124QSize WidgetResizer::getWidgetMinimumSize() const 125 { 126 return widgetMinimumSize; 127 } 128 setWidgetMinimumSize(const QSize & value)129void WidgetResizer::setWidgetMinimumSize(const QSize& value) 130 { 131 widgetMinimumSize = value; 132 } 133 setWidgetMinimumSize(int width,int height)134void WidgetResizer::setWidgetMinimumSize(int width, int height) 135 { 136 widgetMinimumSize = QSize(width, height); 137 } 138 minimizeHeight()139void WidgetResizer::minimizeHeight() 140 { 141 widget->setFixedHeight(widgetMinimumSize.height()); 142 } 143