123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- #pragma execution_character_set("utf-8")
- #include "panelwidget.h"
- #include "qscrollarea.h"
- #include "qframe.h"
- #include "qboxlayout.h"
- #include "qdebug.h"
- PanelWidget::PanelWidget(QWidget *parent) : QWidget(parent)
- {
- scrollArea = new QScrollArea(this);
- scrollArea->setObjectName("scrollAreaMain");
- scrollArea->setWidgetResizable(true);
- scrollAreaWidgetContents = new QWidget();
- scrollAreaWidgetContents->setGeometry(QRect(0, 0, 100, 100));
- verticalLayout = new QVBoxLayout(scrollAreaWidgetContents);
- verticalLayout->setSpacing(0);
- verticalLayout->setContentsMargins(0, 0, 0, 0);
- frame = new QFrame(scrollAreaWidgetContents);
- frame->setObjectName("frameMain");
- gridLayout = new QGridLayout(frame);
- gridLayout->setSpacing(0);
- gridLayout->setContentsMargins(0, 0, 0, 0);
- verticalLayout->addWidget(frame);
- scrollArea->setWidget(scrollAreaWidgetContents);
- frame->setStyleSheet("QFrame#frameMain{border-width:0px;}");
- margin = 0;
- space = 0;
- autoWidth = false;
- autoHeight = false;
- }
- void PanelWidget::resizeEvent(QResizeEvent *)
- {
- scrollArea->resize(this->size());
- }
- QSize PanelWidget::sizeHint() const
- {
- return QSize(300, 200);
- }
- QSize PanelWidget::minimumSizeHint() const
- {
- return QSize(20, 20);
- }
- int PanelWidget::getMargin() const
- {
- return this->margin;
- }
- int PanelWidget::getSpace() const
- {
- return this->space;
- }
- bool PanelWidget::getAutoWidth() const
- {
- return this->autoWidth;
- }
- bool PanelWidget::getAutoHeight() const
- {
- return this->autoHeight;
- }
- QList<QWidget *> PanelWidget::getWidgets()
- {
- return this->widgets;
- }
- int PanelWidget::getColumnCount()
- {
- return this->columnCount;
- }
- void PanelWidget::setWidget(QList<QWidget *> widgets, int columnCount)
- {
- this->widgets = widgets;
- this->columnCount = columnCount;
- int row = 0;
- int column = 0;
- int index = 0;
- //先把之前的所有移除并不可见
- foreach (QWidget *widget, widgets) {
- gridLayout->removeWidget(widget);
- widget->setVisible(false);
- delete widget;
- }
- //重新添加到布局中并可见
- foreach (QWidget *widget, widgets) {
- gridLayout->addWidget(widget, row, column);
- widget->setVisible(true);
- column++;
- index++;
- if (index % columnCount == 0) {
- row++;
- column = 0;
- }
- }
- row++;
- //设置右边弹簧
- if (!autoWidth) {
- QSpacerItem *hSpacer = new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Minimum);
- gridLayout->addItem(hSpacer, 0, gridLayout->columnCount());
- }
- //设置底边弹簧
- if (!autoHeight) {
- QSpacerItem *vSpacer = new QSpacerItem(1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding);
- gridLayout->addItem(vSpacer, row, 0);
- }
- }
- void PanelWidget::setMargin(int left, int top, int right, int bottom)
- {
- gridLayout->setContentsMargins(left, top, right, bottom);
- }
- void PanelWidget::setMargin(int margin)
- {
- if (this->margin != margin) {
- setMargin(margin, margin, margin, margin);
- }
- }
- void PanelWidget::setSpace(int space)
- {
- if (this->space != space) {
- gridLayout->setSpacing(space);
- }
- }
- void PanelWidget::setAutoWidth(bool autoWidth)
- {
- if (this->autoWidth != autoWidth) {
- this->autoWidth = autoWidth;
- }
- }
- void PanelWidget::setAutoHeight(bool autoHeight)
- {
- if (this->autoHeight != autoHeight) {
- this->autoHeight = autoHeight;
- }
- }
|