整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          解決layui多個日期選擇控件一閃而過的問題

          決layui多個日期選擇控件一閃而過的問題

          一、HTML

          <div class="layui-input-inline" style="width: 200px;">
          <input type="text" name="startDate" id="startDate" placeholder="起始日期" autocomplete="off" class="layui-input date">
          </div>
          <div class="layui-form-mid">-</div>
          <div class="layui-input-inline" style="width: 200px;">
          <input type="text" name="endDate"  id="endDate" placeholder="終止日期" autocomplete="off" class="layui-input date">
          </div>

          二、JS

          、前言

          垂直時間軸控件,主要用來描述企業(yè)發(fā)展歷程大事件,或者軟件版本迭代歷史等,通過時間節(jié)點和事件描述來直觀的展示發(fā)展的過程,一般在web網(wǎng)頁或者app中經(jīng)常看到此類控件,尤其是公司的官網(wǎng)關(guān)于公司部分,著重在一些獨角獸公司或者正處于蓬勃發(fā)展的公司,用來展示自己多牛逼,發(fā)展多么迅猛等。


          垂直時間軸控件主要存儲的數(shù)據(jù)包含兩個,一個是時間節(jié)點,一個是事件描述,為了后期的拓展性,采用結(jié)構(gòu)體來存放這個數(shù)據(jù),比如后期還可能增加該事件是否屬于重大事件標(biāo)記,是的話則繪制的時候突出顯示比如加大字號加粗,本控件的主要難點在于自動計算和排列來繪制時間和事件描述,默認(rèn)采用對等分的機制來處理繪制,還有部分時間軸控件是左側(cè)時間右側(cè)事件描述,這個可以在源碼基礎(chǔ)上自行更改或者增加樣式,為了能夠展示所有的事件,本控件主體是繼承自滾動條區(qū)域控件,超過高度自動產(chǎn)生滾動條。

          二、實現(xiàn)的功能

          • 1:可設(shè)置節(jié)點邊距
          • 2:可設(shè)置節(jié)點高度
          • 3:可設(shè)置信息邊框邊距
          • 4:可設(shè)置信息所占高度
          • 5:可設(shè)置基準(zhǔn)顏色/線條顏色
          • 6:可設(shè)置標(biāo)題/信息集合
          • 7:自動產(chǎn)生滾動條
          • 8:支持字符串形式設(shè)置數(shù)據(jù)

          三、效果圖

          四、頭文件代碼

          #ifndef TIMEAXIS_H
          #define TIMEAXIS_H
          
          /**
           * 垂直時間軸控件 作者:雨田哥(QQ:3246214072) 整理:feiyangqingyun(QQ:517216493) 2019-10-07
           * 1:可設(shè)置節(jié)點邊距
           * 2:可設(shè)置節(jié)點高度
           * 3:可設(shè)置信息邊框邊距
           * 4:可設(shè)置信息所占高度
           * 5:可設(shè)置基準(zhǔn)顏色/線條顏色
           * 6:可設(shè)置標(biāo)題/信息集合
           * 7:自動產(chǎn)生滾動條
           * 8:支持字符串形式設(shè)置數(shù)據(jù)
           */
          
          #include <QScrollArea>
          class TimeAxisWidget;
          
          #ifdef quc
          #if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
          #include <QtDesigner/QDesignerExportWidget>
          #else
          #include <QtUiPlugin/QDesignerExportWidget>
          #endif
          
          class QDESIGNER_WIDGET_EXPORT TimeAxis : public QScrollArea
          #else
          class TimeAxis : public QScrollArea
          #endif
          
          {
              Q_OBJECT
              Q_PROPERTY(int itemMargin READ getItemMargin WRITE setItemMargin)
              Q_PROPERTY(int itemHeight READ getItemHeight WRITE setItemHeight)
              Q_PROPERTY(int infoPadding READ getInfoPadding WRITE setInfoPadding)
              Q_PROPERTY(int infoHeight READ getInfoHeight WRITE setInfoHeight)
          
              Q_PROPERTY(QColor baseColor READ getBaseColor WRITE setBaseColor)
              Q_PROPERTY(QColor lineColor READ getLineColor WRITE setLineColor)
          
              Q_PROPERTY(QString title READ getTitle WRITE setTitle)
              Q_PROPERTY(QString infos READ getInfos WRITE setInfos)
          
          public:
              explicit TimeAxis(QWidget *parent = 0);
          
          private:
              int itemMargin;         //節(jié)點邊距
              int itemHeight;         //節(jié)點高度
              int infoPadding;        //信息邊距
              int infoHeight;         //信息高度
          
              QColor baseColor;       //基準(zhǔn)顏色
              QColor lineColor;       //線條顏色
          
              QString title;          //標(biāo)題
              QString infos;          //信息集合
          
              //時間軸主控件
              TimeAxisWidget *timeAxisWidget;
          
          public:
              int getItemMargin()     const;
              int getItemHeight()     const;
              int getInfoPadding()    const;
              int getInfoHeight()     const;
          
              QColor getBaseColor()   const;
              QColor getLineColor()   const;
          
              QString getTitle()      const;
              QString getInfos()      const;
          
              QSize sizeHint()        const;
              QSize minimumSizeHint() const;
          
              TimeAxisWidget *getWidget();
          
          public Q_SLOTS:
              //設(shè)置節(jié)點邊距+節(jié)點高度
              void setItemMargin(int itemMargin);
              void setItemHeight(int itemHeight);
          
              //設(shè)置信息邊距+信息高度
              void setInfoPadding(int infoPadding);
              void setInfoHeight(int infoHeight);
          
              //設(shè)置基準(zhǔn)顏色+線條顏色
              void setBaseColor(const QColor &baseColor);
              void setLineColor(const QColor &lineColor);
          
              //設(shè)置標(biāo)題+信息集合
              void setTitle(const QString &title);
              void setInfos(const QString &infos);
          };
          
          class TimeAxisWidget : public QWidget
          {
              Q_OBJECT
          
          public:
              //可以自行拓展其他信息
              struct TimeAxisInfo {
                  QString time;   //時間
                  QString info;   //信息
              };
          
              explicit TimeAxisWidget(QWidget *parent = 0);
          
          protected:
              void paintEvent(QPaintEvent *);
              void drawTitle(QPainter *painter);
              void drawLine(QPainter *painter);
              void drawInfo(QPainter *painter);
              void drawInfoRight(QPainter *painter, const QRectF &infoRect, int infoHeight);
              void drawInfoLeft(QPainter *painter, const QRectF &infoRect, int infoHeight);
          
          private:
              int itemMargin;         //節(jié)點邊距
              int itemHeight;         //節(jié)點高度
              int infoPadding;        //信息邊距
              int infoHeight;         //信息高度
          
              QColor baseColor;       //基準(zhǔn)顏色
              QColor lineColor;       //線條顏色
          
              QString title;          //標(biāo)題
              QString infos;          //信息集合
          
              //信息集合結(jié)構(gòu)體
              QList<TimeAxisInfo> itemInfos;
          
          public:
              int getItemMargin()     const;
              int getItemHeight()     const;
              int getInfoPadding()    const;
              int getInfoHeight()     const;
          
              QColor getBaseColor()   const;
              QColor getLineColor()   const;
          
              QString getTitle()      const;
              QString getInfos()      const;
          
              QSize sizeHint()        const;
              QSize minimumSizeHint() const;
          
          public Q_SLOTS:
              //設(shè)置節(jié)點邊距+節(jié)點高度
              void setItemMargin(int itemMargin);
              void setItemHeight(int itemHeight);
          
              //設(shè)置信息邊距+信息高度
              void setInfoPadding(int infoPadding);
              void setInfoHeight(int infoHeight);
          
              //設(shè)置基準(zhǔn)顏色+線條顏色
              void setBaseColor(const QColor &baseColor);
              void setLineColor(const QColor &lineColor);
          
              //設(shè)置標(biāo)題+信息集合
              void setTitle(const QString &title);
              void setInfos(const QString &infos);
          
              //設(shè)置信息集合,結(jié)構(gòu)體方式
              void setItemInfos(const QList<TimeAxisInfo> &itemInfos);
          };
          
          #endif // TIMEAXIS_H
          
          
          

          【領(lǐng)QT開發(fā)教程學(xué)習(xí)資料,點擊下方鏈接莬費領(lǐng)取↓↓,先碼住不迷路~】

          點擊這里:Qt資料領(lǐng)取(視頻教程+文檔+代碼+項目實戰(zhàn))

          五、核心代碼

          void TimeAxisWidget::drawTitle(QPainter *painter)
          {
              painter->save();
          
              QFont font;
              font.setBold(true);
              font.setPointSize(16);
              painter->setFont(font);
          
              painter->setPen(baseColor);
              painter->drawText(itemMargin, itemMargin, width() - 2 * itemMargin, 40, Qt::AlignCenter, title);
          
              painter->restore();
          }
          
          void TimeAxisWidget::drawLine(QPainter *painter)
          {
              painter->save();
              painter->setPen(QPen(lineColor, 6));
              int startY = itemMargin + 50;
              int endY = startY + itemInfos.size() * itemHeight;
              painter->drawLine(width() / 2.0, startY, width() / 2.0, endY);
              painter->restore();
          
              //設(shè)置下固定高度
              this->setFixedHeight(endY + itemMargin);
          }
          
          void TimeAxisWidget::drawInfo(QPainter *painter)
          {
              painter->save();
              painter->setPen(Qt::NoPen);
          
              QFont font;
              font.setPointSize(12);
              painter->setFont(font);
          
              int startY = itemMargin + 50;
              int centerX = this->width() / 2.0;
              int spacer = itemMargin + 10;
          
              //追個繪制時間軸信息集合,偶數(shù)行左側(cè)繪制時間右側(cè)繪制信息
              for (int i = 0; i < itemInfos.size(); i++) {
                  painter->setBrush(Qt::white);
                  painter->setPen(QPen(baseColor, 2));
          
                  if (i % 2 == 0) {
                      //繪制時間
                      QRectF textRect(0, startY, centerX - spacer, itemHeight);
                      painter->drawText(textRect, Qt::AlignRight | Qt::AlignVCenter, itemInfos.at(i).time);
                      //繪制信息邊框
                      QRectF infoRect(centerX + spacer, textRect.center().y() - infoHeight / 2.0, centerX - spacer - itemMargin - infoHeight / 2.0, infoHeight);
                      drawInfoRight(painter, infoRect, infoHeight);
                      //繪制信息背景
                      painter->setBrush(baseColor);
                      drawInfoRight(painter, infoRect.adjusted(infoPadding, infoPadding, 0, -infoPadding), infoHeight - infoPadding * 2);
                      //繪制信息文字
                      painter->setPen(Qt::white);
                      painter->drawText(infoRect.adjusted(infoPadding, infoPadding, 0, -infoPadding), Qt::AlignCenter, itemInfos.at(i).info);
                  } else {
                      //繪制時間
                      QRectF textRect(centerX + spacer, startY, centerX - spacer, itemHeight);
                      painter->drawText(centerX + spacer, startY, centerX - spacer, itemHeight, Qt::AlignLeft | Qt::AlignVCenter, itemInfos.at(i).time);
                      //繪制信息邊框
                      QRectF infoRect(itemMargin + infoHeight / 2.0, textRect.center().y() - infoHeight / 2.0, centerX - spacer - itemMargin - infoHeight / 2.0, infoHeight);
                      drawInfoLeft(painter, infoRect, infoHeight);
                      //繪制信息背景
                      painter->setBrush(baseColor);
                      drawInfoLeft(painter, infoRect.adjusted(0, infoPadding, -infoPadding, -infoPadding), infoHeight - infoPadding * 2);
                      //繪制信息文字
                      painter->setPen(Qt::white);
                      painter->drawText(infoRect.adjusted(0, infoPadding, -infoPadding, -infoPadding), Qt::AlignCenter, itemInfos.at(i).info);
                  }
          
                  //繪制垂直線對應(yīng)的圓
                  painter->setPen(Qt::NoPen);
                  painter->setBrush(baseColor);
                  painter->drawEllipse(centerX - 8, startY + itemHeight / 2.0 - 8, 16, 16);
                  painter->setBrush(Qt::white);
                  painter->drawEllipse(centerX - 4, startY + itemHeight / 2.0 - 4, 8, 8);
          
                  //Y軸往下移一個高度
                  startY += itemHeight;
              }
          
              painter->restore();
          }
          
          

          六、控件介紹

          1. 超過160個精美控件,涵蓋了各種儀表盤、進(jìn)度條、進(jìn)度球、指南針、曲線圖、標(biāo)尺、溫度計、導(dǎo)航條、導(dǎo)航欄,flatui、高亮按鈕、滑動選擇器、農(nóng)歷等。遠(yuǎn)超qwt集成的控件數(shù)量。
          2. 每個類都可以獨立成一個單獨的控件,零耦合,每個控件一個頭文件和一個實現(xiàn)文件,不依賴其他文件,方便單個控件以源碼形式集成到項目中,較少代碼量。qwt的控件類環(huán)環(huán)相扣,高度耦合,想要使用其中一個控件,必須包含所有的代碼。
          3. 全部純Qt編寫,QWidget+QPainter繪制,支持Qt4.6到Qt5.13的任何Qt版本,支持mingw、msvc、gcc等編譯器,支持任意操作系統(tǒng)比如windows+linux+mac+嵌入式linux等,不亂碼,可直接集成到Qt Creator中,和自帶的控件一樣使用,大部分效果只要設(shè)置幾個屬性即可,極為方便。
          4. 每個控件都有一個對應(yīng)的單獨的包含該控件源碼的DEMO,方便參考使用。同時還提供一個所有控件使用的集成的DEMO。
          5. 每個控件的源代碼都有詳細(xì)中文注釋,都按照統(tǒng)一設(shè)計規(guī)范編寫,方便學(xué)習(xí)自定義控件的編寫。
          6. 每個控件默認(rèn)配色和demo對應(yīng)的配色都非常精美。
          7. 超過130個可見控件,6個不可見控件。
          8. 部分控件提供多種樣式風(fēng)格選擇,多種指示器樣式選擇。
          9. 所有控件自適應(yīng)窗體拉伸變化。
          10. 集成自定義控件屬性設(shè)計器,支持拖曳設(shè)計,所見即所得,支持導(dǎo)入導(dǎo)出xml格式。
          11. 自帶activex控件demo,所有控件可以直接運行在ie瀏覽器中。
          12. 集成fontawesome圖形字體+阿里巴巴iconfont收藏的幾百個圖形字體,享受圖形字體帶來的樂趣。
          13. 所有控件最后生成一個動態(tài)庫文件(dll或者so等),可以直接集成到qtcreator中拖曳設(shè)計使用。
          14. 目前已經(jīng)有qml版本,后期會考慮出pyqt版本,如果用戶需求量很大的話。
          15. 自定義控件插件開放動態(tài)庫使用(永久免費),無任何后門和限制,請放心使用。
          16. 目前已提供32個版本的dll,其中qt_5_7_0_mingw530_32這個版本會一直保證最新的完整的。
          17. 不定期增加控件和完善控件,不定期更新SDK,歡迎各位提出建議,謝謝!
          18. Qt入門書籍推薦霍亞飛的《Qt Creator快速入門》《Qt5編程入門》,Qt進(jìn)階書籍推薦官方的《C++ GUI Qt4編程》。
          19. 強烈推薦程序員自我修養(yǎng)和規(guī)劃系列書《大話程序員》《程序員的成長課》《解憂程序員》,受益匪淺,受益終生!
          20. SDK地址:https://gitee.com/feiyangqingyun/QUCSDK https://github.com/feiyangqingyun/qucsdk

          原文鏈接:https://www.cnblogs.com/feiyangqingyun/p/11639987.html

          【領(lǐng)QT開發(fā)教程學(xué)習(xí)資料,點擊下方鏈接莬費領(lǐng)取↓↓,先碼住不迷路~】

          點擊這里:「鏈接」

          頁編程之?dāng)?shù)字選擇器。

          同學(xué)們好!這里是免費少兒編程知識分享,每天一行代碼誰都能學(xué)會!今天分享的知識是數(shù)字選擇器,用到的是input標(biāo)簽,type屬性值為range。這個控件常被用來快速輸入不太精準(zhǔn)的數(shù)字,比如說調(diào)節(jié)明暗色值高寬等數(shù)據(jù),以一個可以拖動的滾動條形態(tài)出現(xiàn)。

          先來看看今天實例的運行效果,網(wǎng)頁上為了方便展示,我仍將其分為了上下兩段,上面的是一個數(shù)學(xué)加法公式,默認(rèn)是0+0=0。

          下面是兩個Range控件,中間一個加號,先拖動第一個range,發(fā)現(xiàn)加數(shù)值發(fā)生了變化,拖動第二個時被加數(shù)值發(fā)生了變化。而且不論是拖動哪一個range,控件最終都會自動得算出等式的值。這就是range控件的一個簡單使用場景,效果各位同學(xué)都已經(jīng)看到了。

          《ipt t現(xiàn)在我們來看看實現(xiàn)的代碼吧。igut range控件仍然是由input,《ip標(biāo)簽的type屬性來編寫而成的。它常用的屬性有Max控件能接受的最大數(shù)值范圍。<ipt tnpe Min控件能接受的最小數(shù)值范圍。tep每次拖動時值自動增加或者減少多少。

          《ipuvalue設(shè)置控件在頁面加載之初的默認(rèn)值。onMouserMove事件當(dāng)鼠標(biāo)在控件移動時觸發(fā)。《ip這些屬性其實早就已經(jīng)給你們講過了,相信各位同學(xué)自己也能看明白。aipt控件就講完了。

          《p各位同學(xué)你們有沒有發(fā)現(xiàn)司與定出稱力be?ipt 當(dāng)基礎(chǔ)知識累積到一定程度的時候,《input p編程也就沒有那么難了。《iput 就算是陌生的東西只要出現(xiàn)過,《inut pa你猜也能猜個八九不離十。

          《ipt 還有時間來講解一下示例里的JS吧。onMousemove事件加上了自定義函數(shù)CSUM。《iptp" 只要鼠標(biāo)在控件上移動,《ip就調(diào)用這個函數(shù)來完成計算等式的值。事件中的函數(shù)名和JS中的函數(shù)名必須完全一致。《ip在CSUM中我先定義了三個變量ABC,AB分別用來保存兩個 reng 的值。這里的A1、A2、A3就是上一章節(jié)才講過的label標(biāo)簽,也是使用id來引用的。將AB的值分別顯示在label中。

          ·這一句是計算a加b的值,《ipt tne在A3這個label中顯示出來,i這里還用到了JS的內(nèi)置函數(shù)syslnt,可以將字符串轉(zhuǎn)化為數(shù)字,涉及到變量類型就先不講了。

          ·總之最后的結(jié)果就是示例的樣子,《ipet t》在這里還有一段注釋代碼,以后學(xué)習(xí)了JS之后再回過頭來看就會非常有意思。ipt tpr'就會非常有意思,這個控件的寫法和使用都很簡單。

          今天的分享就到這里,希望各位同學(xué)下去照著寫三遍,做到不看視頻也能夠?qū)懗鰜恚械陌咐跋嚓P(guān)文檔均可以向我獲取,下期見。網(wǎng)頁編程服務(wù)端編程數(shù)據(jù)庫算法,點贊關(guān)注。


          主站蜘蛛池模板: 国产精品资源一区二区| 中文字幕精品亚洲无线码一区应用| 一区在线观看视频| 亚洲午夜一区二区电影院| 波多野结衣中文字幕一区二区三区| 国产精品电影一区| 中文字幕无线码一区二区| 日韩精品一区二区三区色欲AV| 日本一区二区在线| 亚洲丰满熟女一区二区v| 日韩一区二区视频在线观看| 亚洲va乱码一区二区三区| 亚洲色偷精品一区二区三区| 久久精品无码一区二区无码| 亚洲一区二区三区国产精品无码 | 亚洲国产AV无码一区二区三区| 无码人妻精品一区二区蜜桃| 视频在线观看一区二区三区| 国产亚洲自拍一区| 亚洲综合在线成人一区| 日韩在线一区高清在线| 在线成人一区二区| 久久国产精品无码一区二区三区 | 国产一区二区成人| 波多野结衣一区在线| 一区二区国产在线播放| 丰满少妇内射一区| 亚洲一区无码中文字幕乱码| 国产伦精品一区二区三区不卡 | 国产自产对白一区| 无码人妻精品一区二区三区99性| 中文字幕国产一区| 日韩人妻无码一区二区三区久久99 | 久久免费精品一区二区| 97久久精品一区二区三区| 在线精品视频一区二区| 亚洲夜夜欢A∨一区二区三区| 另类一区二区三区| 精品国产亚洲第一区二区三区| 无码AV一区二区三区无码| 亚洲乱码一区av春药高潮|