Преглед на файлове

V0.5.2
1、新添加了一些内容

Apple преди 2 месеца
родител
ревизия
4ba715e2d4

+ 1 - 1
Common/combox/customcombobox.h

@@ -15,7 +15,7 @@ public:
     //重写下拉框弹出位置
     void showPopup() override;
 private:
-    const int LISTVIEW_MARGIN = 12; // QAbstractItemView边距(阴影宽度)
+    const int LISTVIEW_MARGIN = 8; // QAbstractItemView边距(阴影宽度)
 };
 
 #endif // CUSTOMCOMBOBOX_H

+ 1 - 1
External

@@ -1 +1 @@
-Subproject commit 1460633049acd624c9724d39e3bc1fee8c92d3c6
+Subproject commit cc1b2f06472f420a7e0027b9131e3ee86a6ad285

+ 16 - 2
EyeMap/CMakeLists.txt

@@ -15,13 +15,20 @@ file(GLOB LOCAL_SRC
     ${CMAKE_CURRENT_SOURCE_DIR}/SettingNum/*.ui
     ${CMAKE_CURRENT_SOURCE_DIR}/SettingNum/OneItem/*.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/SettingNum/OneItem/*.ui
+    # ${CMAKE_CURRENT_SOURCE_DIR}/SettingNum/DragableTable/*.cpp
 
     ${CMAKE_SOURCE_DIR}/*.cpp
     ${CMAKE_SOURCE_DIR}/*.ui
 
-    # ${CMAKE_SOURCE_DIR}/External/common/Thread/*.cpp
-    ${CMAKE_SOURCE_DIR}/External/common/ThreadPool/*.cpp
+    ${CMAKE_SOURCE_DIR}/External/common/LHColorDialog/*.cpp
+    ${CMAKE_SOURCE_DIR}/External/common/LHColorDialog/*.qrc
+    ${CMAKE_SOURCE_DIR}/External/common/LHColorDialog/DropShadow/*.cpp
+    ${CMAKE_SOURCE_DIR}/External/common/LHColorDialog/PaintHelper/*.cpp
+    ${CMAKE_SOURCE_DIR}/External/common/LHColorDialog/api/*.cpp
+    ${CMAKE_SOURCE_DIR}/External/common/ImageBlur/*.cpp
+    ${CMAKE_SOURCE_DIR}/External/module/ThreadPool/*.cpp
     ${CMAKE_SOURCE_DIR}/External/UI/Resource/*.qrc
+
     ${CMAKE_SOURCE_DIR}/Common/Logs/*.cpp
     ${CMAKE_SOURCE_DIR}/Common/combox/*.cpp
 
@@ -42,9 +49,16 @@ target_include_directories(${execName1} PRIVATE
     ${CMAKE_CURRENT_SOURCE_DIR}/EyeMapWidget
     ${CMAKE_CURRENT_SOURCE_DIR}/SettingNum
     ${CMAKE_CURRENT_SOURCE_DIR}/SettingNum/OneItem
+    # ${CMAKE_CURRENT_SOURCE_DIR}/SettingNum/DragableTable
 
     ${CMAKE_SOURCE_DIR}
     ${CMAKE_SOURCE_DIR}/External/common
+    ${CMAKE_SOURCE_DIR}/External/common/LHColorDialog
+    ${CMAKE_SOURCE_DIR}/External/common/LHColorDialog/DropShadow
+    ${CMAKE_SOURCE_DIR}/External/common/LHColorDialog/PaintHelper
+    ${CMAKE_SOURCE_DIR}/External/common/LHColorDialog/api
+    ${CMAKE_SOURCE_DIR}/External/common/ImageBlur
+    ${CMAKE_SOURCE_DIR}/External/module
     ${CMAKE_SOURCE_DIR}/Common/Logs
     ${CMAKE_SOURCE_DIR}/Common/combox
 

+ 21 - 0
EyeMap/EyeMapWidget/eyemapwidget.cpp

@@ -6,6 +6,7 @@
 #include <QDateTime>
 
 #include "settingnum.h"
+#include "OneEyeMap.h"
 
 EyeMapWidget::EyeMapWidget(QWidget *parent) :
     QWidget(parent),
@@ -50,6 +51,16 @@ EyeMapWidget::EyeMapWidget(QWidget *parent) :
     m_timerTime.setTimerType(Qt::PreciseTimer);
     m_timerTime.setSingleShot(false);
 
+    /* 创建8个眼图 */
+    for(int i = 1; i <= 8; i++)
+    {
+        OneEyeMap* oneEyeMap = new OneEyeMap(this);
+        oneEyeMap->setNum(i);
+        oneEyeMap->setTitle("通道" + QString::number(i));
+        oneEyeMap->setColor(QColor("#2D2D31"));
+        oneEyeMap->hide();
+    }
+
     /* 连接信号和槽 */
     connect(ui->pBtn_exit, &QPushButton::clicked, this, &EyeMapWidget::do_exit);
     connect(&m_timerTime, &QTimer::timeout, this, &EyeMapWidget::do_timeWalk);
@@ -63,6 +74,7 @@ EyeMapWidget::~EyeMapWidget()
     delete ui;
 }
 
+
 void EyeMapWidget::do_exit()
 {
     this->close();
@@ -82,6 +94,15 @@ void EyeMapWidget::do_pBtnSettingNum()
 {
     std::shared_ptr<SettingNum> settingNum = std::make_shared<SettingNum>();
     settingNum->setParent(this);
+    /* 设置眼图显示的个数 */
+    settingNum->setRowAndColumn(4, 2);
     settingNum->exec();
 }
 
+
+/* 排列眼图布局 */
+void EyeMapWidget::eyeMapLayout()
+{
+    
+}
+

+ 12 - 1
EyeMap/EyeMapWidget/eyemapwidget.h

@@ -25,10 +25,21 @@ private slots:
     /* 设置眼图个数槽函数 */
     void do_pBtnSettingNum();
 
+private:
+    /* 排列眼图布局 */
+    void eyeMapLayout();
+
 private:
     Ui::EyeMapWidget *ui;
     std::shared_ptr<spdlog::logger> m_logger = nullptr;
     QTimer m_timerTime;                         /* 时间定时器 */
+
+    /* 布局信息 */
+    int m_marginLeft = 32;                      /* 左侧边距 */
+    int m_marginTop = 18;                       /* 顶部边距 */
+    int m_marginRight = 32;                     /* 右侧边距 */
+    int m_marginBottom = 32;                    /* 底部边距 */
+    int m_spacing = 16;                         /* 间距 */
 };
 
-#endif // EYEMAPWIDGET_H
+#endif /* EYEMAPWIDGET_H */

+ 25 - 0
EyeMap/OneEyeMap/OneEyeMap.h

@@ -22,6 +22,24 @@ public:
     explicit OneEyeMap(QWidget *parent = nullptr);
     ~OneEyeMap();
 
+    /* 设置序号 */
+    void setNum(int num) { m_num = num; }
+    /* 获取序号 */
+    int getNum() { return m_num; }
+    /* 设置标题 */
+    void setTitle(const QString &title) { m_title = title; }
+    /* 获取标题 */
+    QString getTitle() { return m_title; }
+    /* 设置颜色 */
+    void setColor(const QColor &color) { m_color = color; }
+    /* 获取颜色 */
+    QColor getColor() { return m_color; }
+    /* 设置是否显示 */
+    void setShow(bool isShow) { m_isShow = isShow; }
+    /* 获取是否显示 */
+    bool getShow() { return m_isShow; }
+
+
 signals:
     void signal_update();
 
@@ -50,6 +68,13 @@ private:
 private:
     Ui::OneEyeMap *ui;
     std::shared_ptr<spdlog::logger> m_logger = nullptr;
+
+    /* 眼图属性信息 */
+    bool m_isShow = false;              /* 是否显示 */
+    int m_num;                          /* 序号 */
+    QString m_title;                    /* 标题 */
+    QColor m_color;                     /* 颜色 */
+
     QTimer m_timer;
 
     QRect m_rectScaleValue;             /* 刻度值区域 */

+ 228 - 0
EyeMap/SettingNum/DragableTable/dragabletable.cpp

@@ -0,0 +1,228 @@
+#include "dragabletable.h"
+#include <QDrag>
+#include <QMimeData>
+#include <QUuid>
+#include <QDebug>
+#include <QtEvents>
+#include <QPainter>
+#include <QHeaderView>
+#include "../PaintHelper/painthelper.h"
+
+DragableTable::DragableTable(QWidget *parent)
+    : QTableView(parent)
+    , m_UUID(QUuid::createUuid())
+    , m_bSignalOnly(false)
+    , m_bDragEnable(true)
+    , m_nTargetRow(-1)
+    , m_bIsUpon(false)
+{
+    SetDragTargetRow(-1);
+    setAcceptDrops(true);
+}
+
+void DragableTable::SetDragEnable(bool value)
+{
+    setAcceptDrops(value);
+    m_bDragEnable = value;
+}
+//某行之下或之上
+void DragableTable::SetDragTargetRow(int row, bool isUpon)
+{
+    if(!m_bDragEnable) return;
+    DragableTableDelegate *pDelegate = dynamic_cast<DragableTableDelegate*>(itemDelegate());
+    if(pDelegate == nullptr) return;
+    pDelegate->SetDragTarget(row, isUpon);
+    
+//    setProperty("dragTargetRow", row);
+//    setProperty("isUpon", isUpon);
+    m_nTargetRow = row;
+    m_bIsUpon = isUpon;
+    update();
+}
+void DragableTable::mouseMoveEvent(QMouseEvent *event)
+{
+    QTableView::mouseMoveEvent(event);
+    if(!m_bDragEnable) return;
+    if(!m_indexPressed.isValid()) return;
+    //启动Drag事件
+    QDrag *drag = new QDrag(this);
+    QMimeData *mimeData = new QMimeData();
+    mimeData->setText(m_UUID.toString());
+    drag->setMimeData(mimeData);
+    drag->exec(Qt::MoveAction, Qt::CopyAction);
+    m_indexPressed = QModelIndex();
+    SetDragTargetRow(-1);
+}
+
+void DragableTable::mousePressEvent(QMouseEvent *event)
+{
+    QTableView::mousePressEvent(event);
+    if(!m_bDragEnable) return;
+    //只允许左键按住
+    if(event->button() != Qt::LeftButton) return;
+    
+    //根据触发鼠标位置获得QModelIndex
+    m_indexPressed = indexAt(event->pos());
+}
+
+void DragableTable::mouseReleaseEvent(QMouseEvent *event)
+{
+    QTableView::mouseReleaseEvent(event);
+    if(!m_bDragEnable) return;
+    m_indexPressed = QModelIndex();
+    SetDragTargetRow(-1);
+}
+
+void DragableTable::dragEnterEvent(QDragEnterEvent *event)
+{
+    if(!m_bDragEnable) return;
+    const QMimeData *mimeData = event->mimeData();
+    if(mimeData == nullptr || !mimeData->hasText()) return;
+    if(event->mimeData()->text() != m_UUID.toString()) return;
+    
+    {//下面内容和dragMoveEvent里的一样, 避免dragMoveEvent未被调用而直接进入dropEvent
+        QModelIndex index = indexAt(event->pos());
+        int row = -1;
+        //如拖拽到表格的空白位置, 视为目标是最后一行之下
+        if(!index.isValid())
+        {
+            row = model()->rowCount() - 1;
+            SetDragTargetRow(row, false);
+        }
+        else 
+        {
+            QRect indexRect = visualRect(index);
+            int rowHeight = verticalHeader()->sectionSize(index.row());
+            int center = indexRect.top() + rowHeight/2;
+            SetDragTargetRow(index.row(), event->pos().y()<=center);
+        }
+    }
+    event->accept();
+}
+void DragableTable::dragMoveEvent(QDragMoveEvent *event)
+{
+    if(!m_bDragEnable) return;
+    QModelIndex index = indexAt(event->pos());
+    int row = -1;
+    //如拖拽到表格的空白位置, 视为目标是最后一行之下
+    if(!index.isValid())
+    {
+        row = model()->rowCount() - 1;
+        SetDragTargetRow(row, false);
+    }
+    else 
+    {
+        QRect indexRect = visualRect(index);
+        int rowHeight = verticalHeader()->sectionSize(index.row());
+        int center = indexRect.top() + rowHeight/2;
+        SetDragTargetRow(index.row(), event->pos().y()<=center);
+    }
+}
+
+void DragableTable::dropEvent(QDropEvent *event)
+{
+    if(!m_bDragEnable) return;
+    /*----------------------------------------------------------------
+     * 设置QDrag::exec()的返回值, 必须配合accept使用
+     * 也可以直接调用acceptProposedAction方法来将返回值设为调用QDrag::exec时传入的defaultDropAction
+     * event->setDropAction(Qt::MoveAction);
+     * event->accept();
+     * 不管之前执行了accept还是acceptProposedAction, 只要执行了event->ignore, QDrag::exec()的返回值都会是Qt::IgnoreAction
+     * event->ignore();
+    ----------------------------------------------------------------*/
+    do
+    {
+        int sourceRow = m_indexPressed.row();
+        if(m_nTargetRow == -1) break;
+        if(sourceRow == m_nTargetRow) break;
+        
+        //计算实际要插入到的行: 如果是插入到"之下", 则要加1; 如果把上方的行往下移, 则要减1
+        int insertedRow = m_nTargetRow + (m_bIsUpon?0:1) - ((sourceRow>m_nTargetRow)?0:1);
+        if(sourceRow == insertedRow) break;
+        
+        //发送信号
+        emit sig_Drop(sourceRow, insertedRow);
+        if(m_bSignalOnly) break;
+        
+        QStandardItemModel *pModel = dynamic_cast<QStandardItemModel*>(model());
+        if(pModel == nullptr) break;
+        
+        QList<QStandardItem*> targetRowItems = pModel->takeRow(sourceRow);
+        if(!targetRowItems.isEmpty()) pModel->insertRow(insertedRow, targetRowItems);
+        
+        /*----------------------------------------------------------------
+         * 另一种思路:先交换源行和目标行的数据, 交换后目标行去到了源行, 其他行不受影响; 再将目标行移到当前源行位置之后
+        ----------------------------------------------------------------*/
+        
+    }while (false);
+    
+    m_indexPressed = QModelIndex();
+    SetDragTargetRow(-1);
+    event->acceptProposedAction();
+}
+
+DragableTableDelegate::DragableTableDelegate(QObject *parent)
+    : BaseItemDelegate(parent)
+//    , m_pTableView(parentTable)
+    , m_nTargetRow(-1)
+    , m_bIsUpon(false)
+{
+    
+}
+
+void DragableTableDelegate::SetDragTarget(int targetRow, bool isUpon)
+{
+    m_nTargetRow = targetRow;
+    m_bIsUpon = isUpon;
+}
+
+void DragableTableDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
+{
+    BaseItemDelegate::paint(painter,option,index);
+    
+    if(m_nTargetRow == -1) return;
+    PainterEx *painterEx = static_cast<PainterEx*>(painter);
+    
+    //绘制第一列单元格圆圈和线
+    if(index.row() == m_nTargetRow && index.column() == 0)
+    {
+        int y = m_bIsUpon?option.rect.top():option.rect.bottom();
+        painterEx->DrawCircle(QPoint(km_nRadius, y), km_nRadius, Qt::transparent, QPen(QColor(86,135,228), 2));
+        painterEx->setPen(QPen(QColor(86,135,228), 2));
+        painterEx->drawLine(option.rect.left()+km_nRadius*2, y, option.rect.right(), y);
+    }
+    //如果指示器绘制在当前行的下方, 因为头部圆圈会跨到下一行, 所以在绘制下一行的时候, 又绘制一次
+    if(!m_bIsUpon && (index.row() == m_nTargetRow+1) && index.column() == 0)
+    {
+        int y = option.rect.top() - 1;
+        painterEx->DrawCircle(QPoint(km_nRadius, y), km_nRadius, Qt::transparent, QPen(QColor(86,135,228), 2));
+        painterEx->setPen(QPen(QColor(86,135,228), 2));
+        painterEx->drawLine(option.rect.left()+km_nRadius*2, y, option.rect.right(), y);
+    }
+    //绘制后面单元格的线
+    if(index.row() == m_nTargetRow && index.column() != 0)
+    {
+        painterEx->DrawBorder(option.rect, QPen(QColor(86,135,228), 2), m_bIsUpon?PainterEx::RectBorderTop:PainterEx::RectBorderBottom);
+    }
+    
+//    //绘制拖拽指示器(绘制2*列数次, 防止被覆盖)
+//    if(index.row() == m_nTargetRow||index.row() == m_nTargetRow+1)
+//    {
+//        painter->setRenderHint(QPainter::Antialiasing);
+//        painter->setPen(QPen(QColor(86,135,228), 2));
+//        painter->setBrush(Qt::transparent);
+        
+//        //int rowCount = m_pTableView->model()->rowCount();
+//        int colCount = m_pTableView->model()->columnCount();
+//        QPoint targetRowRect_topLeft = m_pTableView->visualRect(m_pTableView->model()->index(row,0)).topLeft();
+//        QPoint targetRowRect_bottomRight = m_pTableView->visualRect(m_pTableView->model()->index(row,colCount-1)).bottomRight();
+//        QRect targetRowRect(targetRowRect_topLeft, targetRowRect_bottomRight);
+        
+//        //头部圆圈
+//        int radius = 8;
+//        int y = m_bIsUpon?targetRowRect.top():targetRowRect.bottom();
+//        QPoint topleft = QPoint(targetRowRect.left(), y - radius);
+//        painter->drawEllipse(QRect(topleft, QSize(radius*2, radius*2)));
+//        painter->drawLine(targetRowRect.left()+radius*2, y, targetRowRect.right(), y);
+    //    }
+}

+ 53 - 0
EyeMap/SettingNum/DragableTable/dragabletable.h

@@ -0,0 +1,53 @@
+#ifndef DRAGABLETABLE_H
+#define DRAGABLETABLE_H
+
+#include <QWidget>
+#include <QStandardItemModel>
+#include <QTableView>
+#include <QStyledItemDelegate>
+#include <QUuid>
+#include "../BaseItemDelegate/baseitemdelegate.h"
+
+class DragableTableDelegate : public BaseItemDelegate
+{
+    Q_OBJECT
+public:
+    explicit DragableTableDelegate(QObject *parent = nullptr);
+    void SetDragTarget(int targetRow, bool isUpon);
+public:
+    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
+protected:
+    int m_nTargetRow;
+    bool m_bIsUpon;
+    const int km_nRadius = 8;
+};
+
+
+class DragableTable : public QTableView
+{
+    Q_OBJECT
+public:
+    explicit DragableTable(QWidget *parent = nullptr);
+    void SetSignalOnly(bool value){m_bSignalOnly = value;}
+    void SetDragEnable(bool value);
+protected:
+    virtual void mouseMoveEvent(QMouseEvent *event) override;
+    virtual void mousePressEvent(QMouseEvent *event) override;
+    virtual void mouseReleaseEvent(QMouseEvent *event) override;
+    virtual void dragMoveEvent(QDragMoveEvent *event) override;
+    virtual void dropEvent(QDropEvent *event) override;
+    virtual void dragEnterEvent(QDragEnterEvent *event) override;
+signals:
+    void sig_Drop(int sourceRow, int targetRow);    //信号发生在真正修改table行顺序之前
+private:
+    QModelIndex m_indexPressed;
+    QUuid m_UUID;                       //该table对象唯一标识符(不允许从一个table拖拽到另一个)
+    bool m_bSignalOnly;                 //仅发出信号, 而不真正修改table行顺序
+    bool m_bDragEnable;                 //是否允许拖拽
+    int m_nTargetRow;
+    bool m_bIsUpon;
+private:
+    void SetDragTargetRow(int row, bool isUpon = true);
+};
+
+#endif // DRAGABLETABLE_H

BIN
EyeMap/SettingNum/LHColorDialog.zip


+ 21 - 0
EyeMap/SettingNum/OneItem/OneSettingItem.qss

@@ -77,4 +77,25 @@ QComboBox QAbstractItemView::item:selected
 	background-color: #438EFF;
 }
 
+/**************** LineEdit *********************/
+QLineEdit
+{
+	background: #3A3940;
+	border-radius: 4px;
+	border: 1px solid #595959;
+}
+
+/*****************  背景色块 ****************/
+QWidget#widget_bg
+{
+	background: #3A3940;
+	border-radius: 4px;
+	border: 1px solid #595959;
+}
+
+QPushButton#pBtn_background
+{
+	background: #2D2D31;
+	border-radius: 2px;
+}
 

+ 29 - 3
EyeMap/SettingNum/OneItem/onesettingitem.cpp

@@ -3,6 +3,7 @@
 
 #include <QDebug>
 #include <QFile>
+#include "colordialogapi.h"
 
 OneSettingItem::OneSettingItem(QWidget *parent) :
     QWidget(parent),
@@ -27,6 +28,9 @@ OneSettingItem::OneSettingItem(QWidget *parent) :
     {
         SPDLOG_LOGGER_ERROR(m_logger, "加载QSS文件失败");
     }
+
+    /* 链接信号和槽 */
+    connect(ui->pBtn_background, &QPushButton::clicked, this, &OneSettingItem::do_pBtn_background);
 }
 
 OneSettingItem::~OneSettingItem()
@@ -34,8 +38,30 @@ OneSettingItem::~OneSettingItem()
     delete ui;
 }
 
-/* 设置行数和列数 */
-void OneSettingItem::setRowColumn(int row, int column)
+
+/* 设置序号 */
+void OneSettingItem::setNum(int num)
+{
+    m_num = num;
+    ui->label_num->setText(QString::number(num));
+}
+
+/* 设置颜色 */
+void OneSettingItem::setColor(const QColor& color)
 {
-    
+    QString qss = QString("background-color: %1").arg(color.name());
+    ui->pBtn_background->setStyleSheet(qss);
 }
+
+/* 获取颜色 */
+void OneSettingItem::do_pBtn_background()
+{
+    SPDLOG_LOGGER_DEBUG(m_logger, "序号{}点击了背景颜色按钮", m_num);
+    QColor color = getColor(nullptr, ColorDlgSkin::DARK);
+    if(color.isValid())
+    {
+        QString qss = QString("background-color: %1").arg(color.name());
+        ui->pBtn_background->setStyleSheet(qss);
+    }
+}
+

+ 11 - 2
EyeMap/SettingNum/OneItem/onesettingitem.h

@@ -16,12 +16,21 @@ public:
     explicit OneSettingItem(QWidget *parent = nullptr);
     ~OneSettingItem();
 
-    /* 设置行数和列数 */
-    void setRowColumn(int row, int column);
+    /* 设置序号 */
+    void setNum(int num);
+    /* 设置颜色 */
+    void setColor(const QColor& color);
+    /* 获取序号 */
+    int getNum() { return m_num; }
+
+private slots:
+    void do_pBtn_background();
 
 private:
     Ui::OneSettingItem *ui;
     std::shared_ptr<spdlog::logger> m_logger = nullptr;
+
+    int m_num;              /* 序号 */
 };
 
 #endif // ONESETTINGITEM_H

+ 39 - 5
EyeMap/SettingNum/OneItem/onesettingitem.ui

@@ -49,7 +49,7 @@
     </widget>
    </item>
    <item>
-    <widget class="QComboBox" name="comboBox">
+    <widget class="CustomComboBox" name="comboBox">
      <property name="minimumSize">
       <size>
        <width>280</width>
@@ -69,20 +69,54 @@
     </widget>
    </item>
    <item>
-    <widget class="QPushButton" name="pBtn_background">
+    <widget class="QWidget" name="widget_bg" native="true">
      <property name="minimumSize">
       <size>
        <width>48</width>
        <height>32</height>
       </size>
      </property>
-     <property name="text">
-      <string/>
-     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout_2">
+      <property name="spacing">
+       <number>0</number>
+      </property>
+      <property name="leftMargin">
+       <number>6</number>
+      </property>
+      <property name="topMargin">
+       <number>6</number>
+      </property>
+      <property name="rightMargin">
+       <number>6</number>
+      </property>
+      <property name="bottomMargin">
+       <number>6</number>
+      </property>
+      <item>
+       <widget class="QPushButton" name="pBtn_background">
+        <property name="minimumSize">
+         <size>
+          <width>36</width>
+          <height>20</height>
+         </size>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+     </layout>
     </widget>
    </item>
   </layout>
  </widget>
+ <customwidgets>
+  <customwidget>
+   <class>CustomComboBox</class>
+   <extends>QComboBox</extends>
+   <header location="global">customcombobox.h</header>
+  </customwidget>
+ </customwidgets>
  <resources/>
  <connections/>
 </ui>

+ 43 - 0
EyeMap/SettingNum/settingnum.cpp

@@ -5,6 +5,7 @@
 #include <QFile>
 
 #include "customcombobox.h"
+#include "onesettingitem.h"
 
 SettingNum::SettingNum(QDialog *parent) :
     QDialog(parent),
@@ -51,7 +52,49 @@ SettingNum::~SettingNum()
     delete ui;
 }
 
+/* 设置行数和列数 */
+void SettingNum::setRowAndColumn(int row, int column)
+{
+    ui->comboBox_rowNum->setCurrentIndex(row - 1);
+    ui->comboBox_columnNum->setCurrentIndex(column - 1);
+    /* 根据 行 x 列 总数计算需要显示的个数 */
+    int num = row * column;
+    for(int i = 0; i < 8; i++)
+    {
+        OneSettingItem *item = new OneSettingItem(ui->widget_list);
+        item->setNum(i + 1);
+        m_listItem.append(item);
+    }
+    /* 移动item的位置 */
+    layoutItem(num);
+}
+
 void SettingNum::do_pBtn_close()
 {
     this->close();
 }
+
+
+/**
+ * @brief 布局item
+ * 
+ * @param num 需要显示的几个item
+ */
+void SettingNum::layoutItem(int num)
+{
+    for(auto item : m_listItem)
+    {
+        auto dy = (item->getNum() - 1) * 48;
+        item->move(0, dy);
+        if(item->getNum() > num)
+        {
+            item->hide();
+        } else
+        {
+            item->show();
+        }
+    }
+    
+}
+
+

+ 10 - 1
EyeMap/SettingNum/settingnum.h

@@ -5,6 +5,8 @@
 
 #include "spdlog/spdlog.h"
 
+class OneSettingItem;
+
 namespace Ui {
 class SettingNum;
 }
@@ -17,14 +19,21 @@ public:
     explicit SettingNum(QDialog *parent = nullptr);
     ~SettingNum();
 
+    /* 设置行数和列数 */
+    void setRowAndColumn(int row, int column);
+
 private slots:
     void do_pBtn_close();
 
+private:
+    /* 布局item */
+    void layoutItem(int num);
+
 private:
     Ui::SettingNum *ui;
     std::shared_ptr<spdlog::logger> m_logger = nullptr;
 
-
+    QList<OneSettingItem*> m_listItem;
 };
 
 #endif // SETTINGNUM_H

+ 55 - 0
GlobalInfo/EyeMapInfo.cpp

@@ -0,0 +1,55 @@
+#include "EyeMapInfo.h"
+#include "OneEyeMap.h"
+
+
+AllEyeMapInfo::~AllEyeMapInfo()
+{
+
+}
+
+/* 添加眼图指针 */
+void AllEyeMapInfo::addEyeMapPtr(OneEyeMap* ptr)
+{
+    /* 先查找有没有重复的指针 */
+    for(auto it = listEyeMapPtr.begin(); it != listEyeMapPtr.end(); it++)
+    {
+        if(*it == ptr)
+        {
+            return;
+        }
+    }
+    listEyeMapPtr.append(ptr);
+}
+
+
+/* 获取每个眼图的序号、标题和颜色 */
+QList<OneEyeMapInfo> AllEyeMapInfo::getEyeMapInfo()
+{
+    QList<OneEyeMapInfo> list;
+    for(const auto& it : listEyeMapPtr)
+    {
+        OneEyeMapInfo info;
+        info.num = it->getNum();
+        info.title = it->getTitle();
+        info.color = it->getColor();
+        list.append(info);
+    }
+    return list;
+}
+
+/* 根据序号查找指针 */
+OneEyeMap* AllEyeMapInfo::findEyeMap(int num)
+{
+    for(const auto& it : listEyeMapPtr)
+    {
+        if(it->getNum() == num)
+        {
+            return it;
+        }
+    }
+    return nullptr;
+}
+
+
+
+

+ 55 - 0
GlobalInfo/EyeMapInfo.h

@@ -0,0 +1,55 @@
+#ifndef EYEMAPINFO_H
+#define EYEMAPINFO_H
+
+#include <QList>
+#include <QColor>
+
+class OneEyeMap;
+
+struct OneEyeMapInfo
+{
+    int num;
+    QString title;
+    QColor color;
+};
+
+
+
+
+
+#define EyeMapInfo AllEyeMapInfo::getInstance()
+
+/* 保存8个眼图的指针信息 */
+class AllEyeMapInfo
+{
+
+    AllEyeMapInfo() {}
+    AllEyeMapInfo& operator=(const AllEyeMapInfo&) = delete;
+    AllEyeMapInfo(const AllEyeMapInfo&) = delete;
+public:
+    ~AllEyeMapInfo();
+
+    AllEyeMapInfo& getInstance()
+    {
+        static AllEyeMapInfo instance;
+        return instance;
+    }
+
+    /* 添加眼图指针 */
+    void addEyeMapPtr(OneEyeMap* ptr);
+    /* 获取每个眼图的序号、标题和颜色 */
+    QList<OneEyeMapInfo> getEyeMapInfo();
+    /* 根据序号查找指针 */
+    OneEyeMap* findEyeMap(int num);
+
+public:
+    QList<OneEyeMap*> listEyeMapPtr;
+
+private:
+    
+};
+
+
+
+
+#endif /* EYEMAPINFO_H */