ソースを参照

V1.3.1
1、添加了流动布局

apple 3 週間 前
コミット
651a7aa1a9

+ 2 - 1
TransmitterSwitch/CMakeLists.txt

@@ -33,10 +33,10 @@ file(GLOB LOCAL_SRC
     ${CMAKE_CURRENT_SOURCE_DIR}/common/DropShadow/*.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/common/PaintHelper/*.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/common/warning/*.cpp
-    # ${CMAKE_CURRENT_SOURCE_DIR}/common/LHLog/*.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/common/Logs/*.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/common/TipWidget/*.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/common/TipWidget/*.qrc
+    ${CMAKE_CURRENT_SOURCE_DIR}/common/FlowLayout/*.cpp
 
     # ${LHQLog_SOURCE_DIRS}/*.cpp
     ${LHHTTPAPI_SOURCE_DIRS}/*.cpp
@@ -80,6 +80,7 @@ target_include_directories(${lib_name} PRIVATE
     ${CMAKE_CURRENT_SOURCE_DIR}/common/LHLog
     ${CMAKE_CURRENT_SOURCE_DIR}/common/Logs
     ${CMAKE_CURRENT_SOURCE_DIR}/common/TipWidget
+    ${CMAKE_CURRENT_SOURCE_DIR}/common/FlowLayout
 
     # ${LHQLog_INCLUDE_DIRS}
     ${LHHTTPAPI_INCLUDE_DIRS}

+ 7 - 1
TransmitterSwitch/UserData/pBtnUserData2.h

@@ -6,6 +6,8 @@
 
 #include "transmitterswitchinfo.h"
 
+class PlanCard;
+
 class PBtnUserData2 : public QObjectUserData
 {
 
@@ -17,10 +19,14 @@ public:
     void setChannelInfo(const ChannelInfo& chn) { m_channelInfo = chn; }
     /* 获取频率ID */
     ChannelInfo& getChannelInfo() { return m_channelInfo; }
+    /* 设置pCard指针 */
+    void setCard(PlanCard* pCard) { m_pCard = pCard; }
+    /* 获取pCard指针 */
+    PlanCard* getCard() { return m_pCard; }
 
 private:
     ChannelInfo m_channelInfo;         /* 频率信息 */
-    
+    PlanCard* m_pCard = nullptr;       /* 卡片指针 */
 };
 
 

+ 11 - 0
TransmitterSwitch/WebAPI/FromWebAPI.cpp

@@ -174,6 +174,17 @@ bool FromWebAPI::getDeviceInfo(QMap<QString, DeviceInfo>& mapDevice)
 /* 获取频率信息 */
 bool FromWebAPI::getChannelInfo(QMap<int, ChannelInfo>& mapFreq)
 {
+    /* 测试,创建几个频率 */
+    for(int i = 0; i < 12; i++)
+    {
+        ChannelInfo freqInfo;
+        freqInfo.ChannelID = i + 1;
+        freqInfo.ChannelName = QString("频率%1").arg(freqInfo.ChannelID);
+        mapFreq.insert(freqInfo.ChannelID, freqInfo);
+    }
+
+
+
     if(m_httpApi == nullptr)
     {
         LH_WRITE_ERROR("WebAPI is nullptr");

+ 232 - 0
TransmitterSwitch/common/FlowLayout/flowlayout.cpp

@@ -0,0 +1,232 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of The Qt Company Ltd nor the names of its
+**     contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtWidgets>
+
+#include "flowlayout.h"
+//! [1]
+FlowLayout::FlowLayout(QWidget *parent, int margin, int hSpacing, int vSpacing)
+    : QLayout(parent), m_hSpace(hSpacing), m_vSpace(vSpacing)
+{
+    setContentsMargins(margin, margin, margin, margin);
+}
+
+FlowLayout::FlowLayout(int margin, int hSpacing, int vSpacing)
+    : m_hSpace(hSpacing), m_vSpace(vSpacing)
+{
+    setContentsMargins(margin, margin, margin, margin);
+}
+//! [1]
+
+//! [2]
+FlowLayout::~FlowLayout()
+{
+    QLayoutItem *item;
+    while ((item = takeAt(0)))
+        delete item;
+}
+//! [2]
+
+//! [3]
+void FlowLayout::addItem(QLayoutItem *item)
+{
+    itemList.append(item);
+}
+//! [3]
+
+//! [4]
+int FlowLayout::horizontalSpacing() const
+{
+    if (m_hSpace >= 0) {
+        return m_hSpace;
+    } else {
+        return smartSpacing(QStyle::PM_LayoutHorizontalSpacing);
+    }
+}
+
+int FlowLayout::verticalSpacing() const
+{
+    if (m_vSpace >= 0) {
+        return m_vSpace;
+    } else {
+        return smartSpacing(QStyle::PM_LayoutVerticalSpacing);
+    }
+}
+//! [4]
+
+//! [5]
+int FlowLayout::count() const
+{
+    return itemList.size();
+}
+
+QLayoutItem *FlowLayout::itemAt(int index) const
+{
+    return itemList.value(index);
+}
+
+QLayoutItem *FlowLayout::takeAt(int index)
+{
+    if (index >= 0 && index < itemList.size())
+        return itemList.takeAt(index);
+    else
+        return 0;
+}
+//! [5]
+
+//! [6]
+Qt::Orientations FlowLayout::expandingDirections() const
+{
+    return 0;
+}
+//! [6]
+
+//! [7]
+bool FlowLayout::hasHeightForWidth() const
+{
+    return true;
+}
+
+int FlowLayout::heightForWidth(int width) const
+{
+    int height = doLayout(QRect(0, 0, width, 0), true);
+    return height;
+}
+//! [7]
+
+//! [8]
+void FlowLayout::setGeometry(const QRect &rect)
+{
+    QLayout::setGeometry(rect);
+    doLayout(rect, false);
+}
+
+QSize FlowLayout::sizeHint() const
+{
+    return minimumSize();
+}
+
+QSize FlowLayout::minimumSize() const
+{
+    QSize size;
+    QLayoutItem *item;
+    foreach (item, itemList)
+        size = size.expandedTo(item->minimumSize());
+
+    size += QSize(2*margin(), 2*margin());
+    return size;
+}
+//! [8]
+
+/**
+ * @brief 布局item
+ * 
+ * @param rect 
+ * @param testOnly 
+ * @return int 
+ */
+int FlowLayout::doLayout(const QRect &rect, bool testOnly) const
+{
+    int left, top, right, bottom;
+    /* 获取布局的margins */
+    getContentsMargins(&left, &top, &right, &bottom);
+    QRect effectiveRect = rect.adjusted(+left, +top, -right, -bottom);
+    int x = effectiveRect.x();
+    int y = effectiveRect.y();
+    int lineHeight = 0;
+//! [9]
+
+//! [10]
+    /* 挨个排列组件,如果被隐藏了,那么也去掉前面的spacing距离 */
+    QLayoutItem *item;
+    foreach (item, itemList) 
+    {
+        QWidget *wid = item->widget();
+        int spaceX = horizontalSpacing();
+        if (spaceX == -1)
+            spaceX = wid->style()->layoutSpacing(
+                QSizePolicy::PushButton, QSizePolicy::PushButton, Qt::Horizontal);
+        int spaceY = verticalSpacing();
+        if (spaceY == -1)
+            spaceY = wid->style()->layoutSpacing(
+                QSizePolicy::PushButton, QSizePolicy::PushButton, Qt::Vertical);
+//! [10]
+//! [11]
+        int nextX = x + item->sizeHint().width() + spaceX;
+        if (nextX - spaceX > effectiveRect.right() && lineHeight > 0) {
+            x = effectiveRect.x();
+            y = y + lineHeight + spaceY;
+            nextX = x + item->sizeHint().width() + spaceX;
+            lineHeight = 0;
+        }
+        /* 不是test就设置位置 */
+        if (!testOnly)
+            item->setGeometry(QRect(QPoint(x, y), item->sizeHint()));
+
+        x = nextX;
+        lineHeight = qMax(lineHeight, item->sizeHint().height());
+    }
+    return y + lineHeight - rect.y() + bottom;
+}
+//! [11]
+//! [12]
+int FlowLayout::smartSpacing(QStyle::PixelMetric pm) const
+{
+    QObject *parent = this->parent();
+    if (!parent) {
+        return -1;
+    } else if (parent->isWidgetType()) {
+        QWidget *pw = static_cast<QWidget *>(parent);
+        return pw->style()->pixelMetric(pm, 0, pw);
+    } else {
+        return static_cast<QLayout *>(parent)->spacing();
+    }
+}
+//! [12]

+ 91 - 0
TransmitterSwitch/common/FlowLayout/flowlayout.h

@@ -0,0 +1,91 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of The Qt Company Ltd nor the names of its
+**     contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef FLOWLAYOUT_H
+#define FLOWLAYOUT_H
+
+#include <QLayout>
+#include <QRect>
+#include <QStyle>
+//! [0]
+class FlowLayout : public QLayout
+{
+public:
+    explicit FlowLayout(QWidget *parent, int margin = -1, int hSpacing = -1, int vSpacing = -1);
+    explicit FlowLayout(int margin = -1, int hSpacing = -1, int vSpacing = -1);
+    ~FlowLayout();
+
+    void addItem(QLayoutItem *item) override;
+    int horizontalSpacing() const;
+    int verticalSpacing() const;
+    Qt::Orientations expandingDirections() const override;
+    bool hasHeightForWidth() const override;
+    int heightForWidth(int) const override;
+    int count() const override;
+    QLayoutItem *itemAt(int index) const override;
+    QSize minimumSize() const override;
+    void setGeometry(const QRect &rect) override;
+    QSize sizeHint() const override;
+    QLayoutItem *takeAt(int index) override;
+    void setHorizontalSpacing(int hSpace) { m_hSpace = hSpace; }
+    void setVerticalSpacing(int vSpace) { m_vSpace = vSpace; }
+
+private:
+    /* 布局排列 */
+    int doLayout(const QRect &rect, bool testOnly) const;
+    int smartSpacing(QStyle::PixelMetric pm) const;
+
+    QList<QLayoutItem *> itemList;
+    int m_hSpace;
+    int m_vSpace;
+};
+//! [0]
+
+#endif // FLOWLAYOUT_H

BIN
TransmitterSwitch/common/spdlog/windows/gcc7.3/libspdlog.a


BIN
TransmitterSwitch/common/spdlog/windows/gcc7.3/libspdlog.dll


BIN
TransmitterSwitch/common/spdlog/windows/gcc7.3/libspdlogd.a


BIN
TransmitterSwitch/common/spdlog/windows/gcc7.3/libspdlogd.dll


+ 89 - 4
TransmitterSwitch/transmitterswitch.cpp

@@ -23,7 +23,7 @@
 #include "UIStyleManager.h"
 #include "PlanData.h"
 #include "PlanCard.h"
-
+#include "flowlayout.h"
 
 
 TransmitterSwitch::TransmitterSwitch(QWidget *parent) :
@@ -36,8 +36,16 @@ TransmitterSwitch::TransmitterSwitch(QWidget *parent) :
     QVBoxLayout* layout = new QVBoxLayout(parent);
     layout->setMargin(0);
     layout->setSpacing(0);
+    parent->setLayout(layout);
     layout->addWidget(this);
 
+    /* 创建一个流式布局,存放卡片 */
+    m_flowlayout = new FlowLayout(ui->scrollAreaContents_Card, 0, m_cardHorSpacing, 12);
+    // m_flowlayout->setContentsMargins(0, 0, 0, 0);
+    // m_flowlayout->setSpacing(200);
+    
+    ui->scrollAreaContents_Card->setLayout(m_flowlayout);
+
     /* 创建WebAPI实例 */
     m_fromWebAPI = new FromWebAPI;
 
@@ -451,9 +459,13 @@ void TransmitterSwitch::do_selectFrequencyBtn()
     {
         return;
     }
+    /* 判断是否是“所有频率”按钮 */
+    bool isAllFrequency = false;
     if(btn != ui->pBtn_allFrequency)
     {
         ui->pBtn_allFrequency->setChecked(false);
+    }else {
+        isAllFrequency = true;
     }
     /* 取消其他按钮的选择 */
     for(auto& it : m_listFrequencyBtn)
@@ -465,6 +477,10 @@ void TransmitterSwitch::do_selectFrequencyBtn()
     }
     /* 设置当前按钮的选择状态 */
     btn->setChecked(true);
+
+    /* 显示当前按钮对应的卡片,隐藏其他卡片 */
+    showOneCard(btn);
+    
 }
 
 
@@ -482,7 +498,7 @@ void TransmitterSwitch::createOneCard(const ChannelInfo& chnInfo)
 
     PBtnUserData2* userData = new PBtnUserData2();
     userData->setChannelInfo(chnInfo);
-    pBtn->setUserData(1, userData);
+    pBtn->setUserData(m_userData_Btn, userData);
 
     /* 设置按钮的样式表 */
     pBtn->setStyleSheet(EPUIStyle.StrQSS_PBtnFrequency);
@@ -496,7 +512,8 @@ void TransmitterSwitch::createOneCard(const ChannelInfo& chnInfo)
 
     /* 创建卡片 */
     PlanCard* pCard = PData.createOneCard(chnInfo);
-    pCard->setParent(ui->widget_planContent);
+    m_flowlayout->addWidget(pCard);
+    userData->setCard(pCard);  /* 设置按钮的卡片指针 */
     /* 排序 */
 }
 
@@ -506,7 +523,7 @@ void TransmitterSwitch::deleteOneCard(int channelID)
     /* 删除按钮 */
     for(auto it = m_listFrequencyBtn.begin(); it != m_listFrequencyBtn.end(); ++it)
     {
-        auto userData = static_cast<PBtnUserData2*>((*it)->userData(1));
+        auto userData = static_cast<PBtnUserData2*>((*it)->userData(m_userData_Btn));
         if(userData != nullptr && userData->getChannelInfo().ChannelID == channelID)
         {
             delete *it;
@@ -529,6 +546,64 @@ void TransmitterSwitch::createAllCard()
     }
 }
 
+/* 显示某个卡片,隐藏其他卡片 */
+void TransmitterSwitch::showOneCard(QPushButton *btn)
+{
+    /* 判断是否是显示全部卡片的按钮 */
+    if(btn == ui->pBtn_allFrequency)
+    {
+        /* 显示全部卡片 */
+        for(auto& it : m_listFrequencyBtn)
+        {
+            auto ud = it->userData(m_userData_Btn);
+            PBtnUserData2* userData = static_cast<PBtnUserData2*>(ud);
+            if(userData != nullptr)
+            {
+                auto pCard = userData->getCard();
+                if(pCard != nullptr)
+                {
+                    pCard->show();
+                }
+            }
+        }
+        /* 设置卡片间的横向间距 */
+        m_flowlayout->setHorizontalSpacing(m_cardHorSpacing);
+        /* 刷新布局,刷新了才会让FlowLayout重新布局 */
+        ui->scrollAreaContents_Card->updateGeometry();
+        return;
+    }
+
+    /* 不是显示全部的按钮,隐藏所有卡片 */
+    for(auto& it : m_listFrequencyBtn)
+    {
+        auto ud = it->userData(m_userData_Btn);
+        PBtnUserData2* userData = static_cast<PBtnUserData2*>(ud);
+        if(userData != nullptr)
+        {
+            auto pCard = userData->getCard();
+            if(pCard != nullptr)
+            {
+                pCard->hide();
+            }
+        }
+    }
+    /* 显示当前卡片 */
+    auto ud = btn->userData(m_userData_Btn);
+    PBtnUserData2* userData = static_cast<PBtnUserData2*>(ud);
+    if(userData != nullptr)
+    {
+        auto pCard = userData->getCard();
+        if(pCard != nullptr)
+        {
+            pCard->show();
+        }
+    }
+    /* 设置卡片间的横向间距 */
+    m_flowlayout->setHorizontalSpacing(0);
+    /* 刷新布局,刷新了才会让FlowLayout重新布局 */
+    ui->scrollAreaContents_Card->updateGeometry();
+}
+
 /* 事件过滤器 */
 bool TransmitterSwitch::eventFilter(QObject *watched, QEvent *event)
 {
@@ -556,6 +631,16 @@ void TransmitterSwitch::resizeEvent(QResizeEvent *event)
     //     QPoint pos = ui->label_Tip->mapTo(this, ui->label_Tip->pos());
     //     m_tipText->move(pos.x() + 2, pos.y() + 2 );
     // }
+    
+    /* 设置scrollArea的大小 */
+    int saWidth = ui->scrollArea->width() - 20 * 3;
+    int saHeight = ui->scrollArea->height() - 20;
+    ui->scrollArea->resize(saWidth, saHeight);
+    ui->scrollAreaContents_Card->resize(saWidth, saHeight);
+    ui->scrollAreaContents_Card->updateGeometry();
+
+    // LH_WRITE_LOG(QString("scrollArea的大小:%1,%2").arg(saWidth).arg(saHeight));
+
     QWidget::resizeEvent(event);
 }
 

+ 10 - 4
TransmitterSwitch/transmitterswitch.h

@@ -1,6 +1,7 @@
 #ifndef TRANSMITTERSWITCH_H
 #define TRANSMITTERSWITCH_H
 
+#include "flowlayout.h"
 #include <QWidget>
 #include <QVector>
 #include <QPushButton>
@@ -8,9 +9,11 @@
 
 class WidgetItems;
 class FromWebAPI;
+class FlowLayout;
 struct InitData;
 struct ChannelInfo;
 
+
 /* 回调函数 */
 using trackCallBack = void(*)(int actionID, QString strMemo);
 
@@ -45,7 +48,6 @@ private slots:
     /* 点击了添加计划按钮 */
     void do_pBtnAddExecPlan();
 
-
     /* 导入模板 */
     void do_importData();
     /* 保存为模板 */
@@ -74,6 +76,8 @@ private:
 
     /* 创建所有频率卡片 */
     void createAllCard();
+    /* 显示某个卡片,隐藏其他卡片 */
+    void showOneCard(QPushButton *btn);
 
 protected:
     /* 事件过滤器 */
@@ -88,12 +92,14 @@ private:
     QString m_styleSheet;                   /* 样式表 */
 
     QList<QPushButton*> m_listFrequencyBtn; /* 频率按钮列表 */
-    QVector<WidgetItems*> m_vecWidgetItems; /* 存储每周8天的item页面 */
-    QVector<QLayout*> m_vecLayouts;         /* 存储每周8天的layout,item都添加到这里面 */
 
     FromWebAPI* m_fromWebAPI = nullptr;     /* WebAPI操作类 */
+    FlowLayout* m_flowlayout = nullptr;     /* 流式布局 */
+
+    trackCallBack m_trackCB = nullptr;      /* 回调函数 */
 
-    trackCallBack m_trackCB = nullptr;     /* 回调函数 */
+    const quint32 m_userData_Btn = 1;       /* 按钮的用户数据 */
+    const int m_cardHorSpacing = 12;        /* 卡片间的横向间距 */
     
 };
 

+ 15 - 1
TransmitterSwitch/transmitterswitch.ui

@@ -454,7 +454,21 @@
           </widget>
          </item>
          <item>
-          <widget class="QWidget" name="widget_planContent" native="true"/>
+          <widget class="QScrollArea" name="scrollArea">
+           <property name="widgetResizable">
+            <bool>true</bool>
+           </property>
+           <widget class="QWidget" name="scrollAreaContents_Card">
+            <property name="geometry">
+             <rect>
+              <x>0</x>
+              <y>0</y>
+              <width>1514</width>
+              <height>753</height>
+             </rect>
+            </property>
+           </widget>
+          </widget>
          </item>
         </layout>
        </widget>