2021-07-10 09:34:53 +00:00
<!doctype html>
< html >
< head >
< meta charset = 'UTF-8' > < meta name = 'viewport' content = 'width=device-width initial-scale=1' >
< link href = 'https://fonts.loli.net/css?family=Open+Sans:400italic,700italic,700,400&subset=latin,latin-ext' rel = 'stylesheet' type = 'text/css' / > < style type = 'text/css' > h t m l { o v e r f l o w - x : i n i t i a l ! i m p o r t a n t ; } : r o o t { - - b g - c o l o r : # f f f f f f ; - - t e x t - c o l o r : # 3 3 3 3 3 3 ; - - s e l e c t - t e x t - b g - c o l o r : # B 5 D 6 F C ; - - s e l e c t - t e x t - f o n t - c o l o r : a u t o ; - - m o n o s p a c e : " L u c i d a C o n s o l e " , C o n s o l a s , " C o u r i e r " , m o n o s p a c e ; - - t i t l e - b a r - h e i g h t : 2 0 p x ; }
.mac-os-11 { --title-bar-height:28px; }
html { font-size: 14px; background-color: var(--bg-color); color: var(--text-color); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; }
2021-08-13 01:33:46 +00:00
body { margin: 0px; padding: 0px; height: auto; inset: 0px; font-size: 1rem; line-height: 1.42857; overflow-x: hidden; background: inherit; tab-size: 4; }
2021-07-10 09:34:53 +00:00
iframe { margin: auto; }
a.url { word-break: break-all; }
a:active, a:hover { outline: 0px; }
.in-text-selection, ::selection { text-shadow: none; background: var(--select-text-bg-color); color: var(--select-text-font-color); }
#write { margin: 0px auto; height: auto; width: inherit; word-break: normal; overflow-wrap: break-word; position: relative; white-space: normal; overflow-x: visible; padding-top: 36px; }
#write.first-line-indent p { text-indent: 2em; }
#write.first-line-indent li p, #write.first-line-indent p * { text-indent: 0px; }
#write.first-line-indent li { margin-left: 2em; }
.for-image #write { padding-left: 8px; padding-right: 8px; }
body.typora-export { padding-left: 30px; padding-right: 30px; }
.typora-export .footnote-line, .typora-export li, .typora-export p { white-space: pre-wrap; }
.typora-export .task-list-item input { pointer-events: none; }
@media screen and (max-width: 500px) {
body.typora-export { padding-left: 0px; padding-right: 0px; }
#write { padding-left: 20px; padding-right: 20px; }
.CodeMirror-sizer { margin-left: 0px !important; }
.CodeMirror-gutters { display: none !important; }
}
#write li > figure:last-child { margin-bottom: 0.5rem; }
#write ol, #write ul { position: relative; }
img { max-width: 100%; vertical-align: middle; image-orientation: from-image; }
button, input, select, textarea { color: inherit; font: inherit; }
input[type="checkbox"], input[type="radio"] { line-height: normal; padding: 0px; }
*, ::after, ::before { box-sizing: border-box; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p, #write pre { width: inherit; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p { position: relative; }
p { line-height: inherit; }
h1, h2, h3, h4, h5, h6 { break-after: avoid-page; break-inside: avoid; orphans: 4; }
p { orphans: 4; }
h1 { font-size: 2rem; }
h2 { font-size: 1.8rem; }
h3 { font-size: 1.6rem; }
h4 { font-size: 1.4rem; }
h5 { font-size: 1.2rem; }
h6 { font-size: 1rem; }
.md-math-block, .md-rawblock, h1, h2, h3, h4, h5, h6, p { margin-top: 1rem; margin-bottom: 1rem; }
.hidden { display: none; }
.md-blockmeta { color: rgb(204, 204, 204); font-weight: 700; font-style: italic; }
a { cursor: pointer; }
sup.md-footnote { padding: 2px 4px; background-color: rgba(238, 238, 238, 0.7); color: rgb(85, 85, 85); border-radius: 4px; cursor: pointer; }
sup.md-footnote a, sup.md-footnote a:hover { color: inherit; text-transform: inherit; text-decoration: inherit; }
#write input[type="checkbox"] { cursor: pointer; width: inherit; height: inherit; }
figure { overflow-x: auto; margin: 1.2em 0px; max-width: calc(100% + 16px); padding: 0px; }
figure > table { margin: 0px; }
tr { break-inside: avoid; break-after: auto; }
thead { display: table-header-group; }
table { border-collapse: collapse; border-spacing: 0px; width: 100%; overflow: auto; break-inside: auto; text-align: left; }
table.md-table td { min-width: 32px; }
.CodeMirror-gutters { border-right: 0px; background-color: inherit; }
.CodeMirror-linenumber { user-select: none; }
.CodeMirror { text-align: left; }
.CodeMirror-placeholder { opacity: 0.3; }
.CodeMirror pre { padding: 0px 4px; }
.CodeMirror-lines { padding: 0px; }
div.hr:focus { cursor: none; }
#write pre { white-space: pre-wrap; }
#write.fences-no-line-wrapping pre { white-space: pre; }
#write pre.ty-contain-cm { white-space: normal; }
.CodeMirror-gutters { margin-right: 4px; }
.md-fences { font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; overflow: visible; white-space: pre; background: inherit; position: relative !important; }
.md-fences-adv-panel { width: 100%; margin-top: 10px; text-align: center; padding-top: 0px; padding-bottom: 8px; overflow-x: auto; }
#write .md-fences.mock-cm { white-space: pre-wrap; }
.md-fences.md-fences-with-lineno { padding-left: 0px; }
#write.fences-no-line-wrapping .md-fences.mock-cm { white-space: pre; overflow-x: auto; }
.md-fences.mock-cm.md-fences-with-lineno { padding-left: 8px; }
.CodeMirror-line, twitterwidget { break-inside: avoid; }
.footnotes { opacity: 0.8; font-size: 0.9rem; margin-top: 1em; margin-bottom: 1em; }
.footnotes + .footnotes { margin-top: 0px; }
.md-reset { margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: top; background: 0px 0px; text-decoration: none; text-shadow: none; float: none; position: static; width: auto; height: auto; white-space: nowrap; cursor: inherit; -webkit-tap-highlight-color: transparent; line-height: normal; font-weight: 400; text-align: left; box-sizing: content-box; direction: ltr; }
li div { padding-top: 0px; }
blockquote { margin: 1rem 0px; }
li .mathjax-block, li p { margin: 0.5rem 0px; }
li blockquote { margin: 1rem 0px; }
li { margin: 0px; position: relative; }
blockquote > :last-child { margin-bottom: 0px; }
blockquote > :first-child, li > :first-child { margin-top: 0px; }
.footnotes-area { color: rgb(136, 136, 136); margin-top: 0.714rem; padding-bottom: 0.143rem; white-space: normal; }
#write .footnote-line { white-space: pre-wrap; }
@media print {
body, html { border: 1px solid transparent; height: 99%; break-after: avoid; break-before: avoid; font-variant-ligatures: no-common-ligatures; }
#write { margin-top: 0px; padding-top: 0px; border-color: transparent !important; }
.typora-export * { -webkit-print-color-adjust: exact; }
.typora-export #write { break-after: avoid; }
.typora-export #write::after { height: 0px; }
.is-mac table { break-inside: avoid; }
.typora-export-show-outline .typora-export-sidebar { display: none; }
}
.footnote-line { margin-top: 0.714em; font-size: 0.7em; }
a img, img a { cursor: pointer; }
pre.md-meta-block { font-size: 0.8rem; min-height: 0.8rem; white-space: pre-wrap; background: rgb(204, 204, 204); display: block; overflow-x: hidden; }
p > .md-image:only-child:not(.md-img-error) img, p > img:only-child { display: block; margin: auto; }
#write.first-line-indent p > .md-image:only-child:not(.md-img-error) img { left: -2em; position: relative; }
p > .md-image:only-child { display: inline-block; width: 100%; }
#write .MathJax_Display { margin: 0.8em 0px 0px; }
.md-math-block { width: 100%; }
.md-math-block:not(:empty)::after { display: none; }
.MathJax_ref { fill: currentcolor; }
[contenteditable="true"]:active, [contenteditable="true"]:focus, [contenteditable="false"]:active, [contenteditable="false"]:focus { outline: 0px; box-shadow: none; }
.md-task-list-item { position: relative; list-style-type: none; }
.task-list-item.md-task-list-item { padding-left: 0px; }
.md-task-list-item > input { position: absolute; top: 0px; left: 0px; margin-left: -1.2em; margin-top: calc(1em - 10px); border: none; }
.math { font-size: 1rem; }
.md-toc { min-height: 3.58rem; position: relative; font-size: 0.9rem; border-radius: 10px; }
.md-toc-content { position: relative; margin-left: 0px; }
.md-toc-content::after, .md-toc::after { display: none; }
.md-toc-item { display: block; color: rgb(65, 131, 196); }
.md-toc-item a { text-decoration: none; }
.md-toc-inner:hover { text-decoration: underline; }
.md-toc-inner { display: inline-block; cursor: pointer; }
.md-toc-h1 .md-toc-inner { margin-left: 0px; font-weight: 700; }
.md-toc-h2 .md-toc-inner { margin-left: 2em; }
.md-toc-h3 .md-toc-inner { margin-left: 4em; }
.md-toc-h4 .md-toc-inner { margin-left: 6em; }
.md-toc-h5 .md-toc-inner { margin-left: 8em; }
.md-toc-h6 .md-toc-inner { margin-left: 10em; }
@media screen and (max-width: 48em) {
.md-toc-h3 .md-toc-inner { margin-left: 3.5em; }
.md-toc-h4 .md-toc-inner { margin-left: 5em; }
.md-toc-h5 .md-toc-inner { margin-left: 6.5em; }
.md-toc-h6 .md-toc-inner { margin-left: 8em; }
}
a.md-toc-inner { font-size: inherit; font-style: inherit; font-weight: inherit; line-height: inherit; }
.footnote-line a:not(.reversefootnote) { color: inherit; }
.md-attr { display: none; }
.md-fn-count::after { content: "."; }
code, pre, samp, tt { font-family: var(--monospace); }
kbd { margin: 0px 0.1em; padding: 0.1em 0.6em; font-size: 0.8em; color: rgb(36, 39, 41); background: rgb(255, 255, 255); border: 1px solid rgb(173, 179, 185); border-radius: 3px; box-shadow: rgba(12, 13, 14, 0.2) 0px 1px 0px, rgb(255, 255, 255) 0px 0px 0px 2px inset; white-space: nowrap; vertical-align: middle; }
.md-comment { color: rgb(162, 127, 3); opacity: 0.8; font-family: var(--monospace); }
code { text-align: left; vertical-align: initial; }
a.md-print-anchor { white-space: pre !important; border-width: initial !important; border-style: none !important; border-color: initial !important; display: inline-block !important; position: absolute !important; width: 1px !important; right: 0px !important; outline: 0px !important; background: 0px 0px !important; text-decoration: initial !important; text-shadow: initial !important; }
.os-windows.monocolor-emoji .md-emoji { font-family: "Segoe UI Symbol", sans-serif; }
.md-diagram-panel > svg { max-width: 100%; }
[lang="flow"] svg, [lang="mermaid"] svg { max-width: 100%; height: auto; }
[lang="mermaid"] .node text { font-size: 1rem; }
table tr th { border-bottom: 0px; }
video { max-width: 100%; display: block; margin: 0px auto; }
iframe { max-width: 100%; width: 100%; border: none; }
.highlight td, .highlight tr { border: 0px; }
mark { background: rgb(255, 255, 0); color: rgb(0, 0, 0); }
.md-html-inline .md-plain, .md-html-inline strong, mark .md-inline-math, mark strong { color: inherit; }
.md-expand mark .md-meta { opacity: 0.3 !important; }
mark .md-meta { color: rgb(0, 0, 0); }
@media print {
.typora-export h1, .typora-export h2, .typora-export h3, .typora-export h4, .typora-export h5, .typora-export h6 { break-inside: avoid; }
}
.md-diagram-panel .messageText { stroke: none !important; }
.md-diagram-panel .start-state { fill: var(--node-fill); }
.md-diagram-panel .edgeLabel rect { opacity: 1 !important; }
.md-fences.md-fences-math { font-size: 1em; }
.md-fences-advanced:not(.md-focus) { padding: 0px; white-space: nowrap; border: 0px; }
.md-fences-advanced:not(.md-focus) { background: inherit; }
.typora-export-show-outline .typora-export-content { max-width: 1440px; margin: auto; display: flex; flex-direction: row; }
.typora-export-sidebar { width: 300px; font-size: 0.8rem; margin-top: 80px; margin-right: 18px; }
.typora-export-show-outline #write { --webkit-flex:2; flex: 2 1 0%; }
.typora-export-sidebar .outline-content { position: fixed; top: 0px; max-height: 100%; overflow: hidden auto; padding-bottom: 30px; padding-top: 60px; width: 300px; }
@media screen and (max-width: 1024px) {
.typora-export-sidebar, .typora-export-sidebar .outline-content { width: 240px; }
}
@media screen and (max-width: 800px) {
.typora-export-sidebar { display: none; }
}
.outline-content li, .outline-content ul { margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; list-style: none; }
.outline-content ul { margin-top: 0px; margin-bottom: 0px; }
.outline-content strong { font-weight: 400; }
.outline-expander { width: 1rem; height: 1.42857rem; position: relative; display: table-cell; vertical-align: middle; cursor: pointer; padding-left: 4px; }
.outline-expander::before { content: ""; position: relative; font-family: Ionicons; display: inline-block; font-size: 8px; vertical-align: middle; }
.outline-item { padding-top: 3px; padding-bottom: 3px; cursor: pointer; }
.outline-expander:hover::before { content: ""; }
.outline-h1 > .outline-item { padding-left: 0px; }
.outline-h2 > .outline-item { padding-left: 1em; }
.outline-h3 > .outline-item { padding-left: 2em; }
.outline-h4 > .outline-item { padding-left: 3em; }
.outline-h5 > .outline-item { padding-left: 4em; }
.outline-h6 > .outline-item { padding-left: 5em; }
.outline-label { cursor: pointer; display: table-cell; vertical-align: middle; text-decoration: none; color: inherit; }
.outline-label:hover { text-decoration: underline; }
.outline-item:hover { border-color: rgb(245, 245, 245); background-color: var(--item-hover-bg-color); }
.outline-item:hover { margin-left: -28px; margin-right: -28px; border-left: 28px solid transparent; border-right: 28px solid transparent; }
.outline-item-single .outline-expander::before, .outline-item-single .outline-expander:hover::before { display: none; }
.outline-item-open > .outline-item > .outline-expander::before { content: ""; }
.outline-children { display: none; }
.info-panel-tab-wrapper { display: none; }
.outline-item-open > .outline-children { display: block; }
.typora-export .outline-item { padding-top: 1px; padding-bottom: 1px; }
.typora-export .outline-item:hover { margin-right: -8px; border-right: 8px solid transparent; }
.typora-export .outline-expander::before { content: "+"; font-family: inherit; top: -1px; }
.typora-export .outline-expander:hover::before, .typora-export .outline-item-open > .outline-item > .outline-expander::before { content: "− "; }
.typora-export-collapse-outline .outline-children { display: none; }
.typora-export-collapse-outline .outline-item-open > .outline-children, .typora-export-no-collapse-outline .outline-children { display: block; }
.typora-export-no-collapse-outline .outline-expander::before { content: "" !important; }
.typora-export-show-outline .outline-item-active > .outline-item .outline-label { font-weight: 700; }
2021-08-13 01:33:46 +00:00
.md-inline-math-container mjx-container { zoom: 0.95; }
2021-07-10 09:34:53 +00:00
2021-09-26 01:50:09 +00:00
.CodeMirror { height: auto; }
.CodeMirror.cm-s-inner { background: inherit; }
.CodeMirror-scroll { overflow: auto hidden; z-index: 3; }
.CodeMirror-gutter-filler, .CodeMirror-scrollbar-filler { background-color: rgb(255, 255, 255); }
.CodeMirror-gutters { border-right: 1px solid rgb(221, 221, 221); background: inherit; white-space: nowrap; }
.CodeMirror-linenumber { padding: 0px 3px 0px 5px; text-align: right; color: rgb(153, 153, 153); }
.cm-s-inner .cm-keyword { color: rgb(119, 0, 136); }
.cm-s-inner .cm-atom, .cm-s-inner.cm-atom { color: rgb(34, 17, 153); }
.cm-s-inner .cm-number { color: rgb(17, 102, 68); }
.cm-s-inner .cm-def { color: rgb(0, 0, 255); }
.cm-s-inner .cm-variable { color: rgb(0, 0, 0); }
.cm-s-inner .cm-variable-2 { color: rgb(0, 85, 170); }
.cm-s-inner .cm-variable-3 { color: rgb(0, 136, 85); }
.cm-s-inner .cm-string { color: rgb(170, 17, 17); }
.cm-s-inner .cm-property { color: rgb(0, 0, 0); }
.cm-s-inner .cm-operator { color: rgb(152, 26, 26); }
.cm-s-inner .cm-comment, .cm-s-inner.cm-comment { color: rgb(170, 85, 0); }
.cm-s-inner .cm-string-2 { color: rgb(255, 85, 0); }
.cm-s-inner .cm-meta { color: rgb(85, 85, 85); }
.cm-s-inner .cm-qualifier { color: rgb(85, 85, 85); }
.cm-s-inner .cm-builtin { color: rgb(51, 0, 170); }
.cm-s-inner .cm-bracket { color: rgb(153, 153, 119); }
.cm-s-inner .cm-tag { color: rgb(17, 119, 0); }
.cm-s-inner .cm-attribute { color: rgb(0, 0, 204); }
.cm-s-inner .cm-header, .cm-s-inner.cm-header { color: rgb(0, 0, 255); }
.cm-s-inner .cm-quote, .cm-s-inner.cm-quote { color: rgb(0, 153, 0); }
.cm-s-inner .cm-hr, .cm-s-inner.cm-hr { color: rgb(153, 153, 153); }
.cm-s-inner .cm-link, .cm-s-inner.cm-link { color: rgb(0, 0, 204); }
.cm-negative { color: rgb(221, 68, 68); }
.cm-positive { color: rgb(34, 153, 34); }
.cm-header, .cm-strong { font-weight: 700; }
.cm-del { text-decoration: line-through; }
.cm-em { font-style: italic; }
.cm-link { text-decoration: underline; }
.cm-error { color: red; }
.cm-invalidchar { color: red; }
.cm-constant { color: rgb(38, 139, 210); }
.cm-defined { color: rgb(181, 137, 0); }
div.CodeMirror span.CodeMirror-matchingbracket { color: rgb(0, 255, 0); }
div.CodeMirror span.CodeMirror-nonmatchingbracket { color: rgb(255, 34, 34); }
.cm-s-inner .CodeMirror-activeline-background { background: inherit; }
.CodeMirror { position: relative; overflow: hidden; }
.CodeMirror-scroll { height: 100%; outline: 0px; position: relative; box-sizing: content-box; background: inherit; }
.CodeMirror-sizer { position: relative; }
.CodeMirror-gutter-filler, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-vscrollbar { position: absolute; z-index: 6; display: none; outline: 0px; }
.CodeMirror-vscrollbar { right: 0px; top: 0px; overflow: hidden; }
.CodeMirror-hscrollbar { bottom: 0px; left: 0px; overflow: auto hidden; }
.CodeMirror-scrollbar-filler { right: 0px; bottom: 0px; }
.CodeMirror-gutter-filler { left: 0px; bottom: 0px; }
.CodeMirror-gutters { position: absolute; left: 0px; top: 0px; padding-bottom: 10px; z-index: 3; overflow-y: hidden; }
.CodeMirror-gutter { white-space: normal; height: 100%; box-sizing: content-box; padding-bottom: 30px; margin-bottom: -32px; display: inline-block; }
.CodeMirror-gutter-wrapper { position: absolute; z-index: 4; background: 0px 0px !important; border: none !important; }
.CodeMirror-gutter-background { position: absolute; top: 0px; bottom: 0px; z-index: 4; }
.CodeMirror-gutter-elt { position: absolute; cursor: default; z-index: 4; }
.CodeMirror-lines { cursor: text; }
.CodeMirror pre { border-radius: 0px; border-width: 0px; background: 0px 0px; font-family: inherit; font-size: inherit; margin: 0px; white-space: pre; overflow-wrap: normal; color: inherit; z-index: 2; position: relative; overflow: visible; }
.CodeMirror-wrap pre { overflow-wrap: break-word; white-space: pre-wrap; word-break: normal; }
.CodeMirror-code pre { border-right: 30px solid transparent; width: fit-content; }
.CodeMirror-wrap .CodeMirror-code pre { border-right: none; width: auto; }
.CodeMirror-linebackground { position: absolute; inset: 0px; z-index: 0; }
.CodeMirror-linewidget { position: relative; z-index: 2; overflow: auto; }
.CodeMirror-wrap .CodeMirror-scroll { overflow-x: hidden; }
.CodeMirror-measure { position: absolute; width: 100%; height: 0px; overflow: hidden; visibility: hidden; }
.CodeMirror-measure pre { position: static; }
.CodeMirror div.CodeMirror-cursor { position: absolute; visibility: hidden; border-right: none; width: 0px; }
.CodeMirror div.CodeMirror-cursor { visibility: hidden; }
.CodeMirror-focused div.CodeMirror-cursor { visibility: inherit; }
.cm-searching { background: rgba(255, 255, 0, 0.4); }
span.cm-underlined { text-decoration: underline; }
span.cm-strikethrough { text-decoration: line-through; }
.cm-tw-syntaxerror { color: rgb(255, 255, 255); background-color: rgb(153, 0, 0); }
.cm-tw-deleted { text-decoration: line-through; }
.cm-tw-header5 { font-weight: 700; }
.cm-tw-listitem:first-child { padding-left: 10px; }
.cm-tw-box { border-style: solid; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-color: inherit; border-top-width: 0px !important; }
.cm-tw-underline { text-decoration: underline; }
@media print {
.CodeMirror div.CodeMirror-cursor { visibility: hidden; }
}
2021-07-10 09:34:53 +00:00
:root {
--side-bar-bg-color: #fafafa;
--control-text-color: #777;
}
@include-when-export url(https://fonts.loli.net/css?family=Open+Sans:400italic,700italic,700,400&subset=latin,latin-ext);
/* open-sans-regular - latin-ext_latin */
/* open-sans-italic - latin-ext_latin */
/* open-sans-700 - latin-ext_latin */
/* open-sans-700italic - latin-ext_latin */
html {
font-size: 16px;
2021-08-13 01:33:46 +00:00
-webkit-font-smoothing: antialiased;
2021-07-10 09:34:53 +00:00
}
body {
2021-08-13 01:33:46 +00:00
font-family: "Open Sans","Clear Sans", "Helvetica Neue", Helvetica, Arial, 'Segoe UI Emoji', sans-serif;
2021-07-10 09:34:53 +00:00
color: rgb(51, 51, 51);
line-height: 1.6;
}
#write {
max-width: 860px;
margin: 0 auto;
padding: 30px;
padding-bottom: 100px;
}
@media only screen and (min-width: 1400px) {
#write {
max-width: 1024px;
}
}
@media only screen and (min-width: 1800px) {
#write {
max-width: 1200px;
}
}
#write > ul:first-child,
#write > ol:first-child{
margin-top: 30px;
}
a {
color: #4183C4;
}
h1,
h2,
h3,
h4,
h5,
h6 {
position: relative;
margin-top: 1rem;
margin-bottom: 1rem;
font-weight: bold;
line-height: 1.4;
cursor: text;
}
h1:hover a.anchor,
h2:hover a.anchor,
h3:hover a.anchor,
h4:hover a.anchor,
h5:hover a.anchor,
h6:hover a.anchor {
text-decoration: none;
}
h1 tt,
h1 code {
font-size: inherit;
}
h2 tt,
h2 code {
font-size: inherit;
}
h3 tt,
h3 code {
font-size: inherit;
}
h4 tt,
h4 code {
font-size: inherit;
}
h5 tt,
h5 code {
font-size: inherit;
}
h6 tt,
h6 code {
font-size: inherit;
}
h1 {
font-size: 2.25em;
line-height: 1.2;
border-bottom: 1px solid #eee;
}
h2 {
font-size: 1.75em;
line-height: 1.225;
border-bottom: 1px solid #eee;
}
/*@media print {
.typora-export h1,
.typora-export h2 {
border-bottom: none;
padding-bottom: initial;
}
.typora-export h1::after,
.typora-export h2::after {
content: "";
display: block;
height: 100px;
margin-top: -96px;
border-top: 1px solid #eee;
}
}*/
h3 {
font-size: 1.5em;
line-height: 1.43;
}
h4 {
font-size: 1.25em;
}
h5 {
font-size: 1em;
}
h6 {
font-size: 1em;
color: #777;
}
p,
blockquote,
ul,
ol,
dl,
table{
margin: 0.8em 0;
}
li>ol,
li>ul {
margin: 0 0;
}
hr {
height: 2px;
padding: 0;
margin: 16px 0;
background-color: #e7e7e7;
border: 0 none;
overflow: hidden;
box-sizing: content-box;
}
li p.first {
display: inline-block;
}
ul,
ol {
padding-left: 30px;
}
ul:first-child,
ol:first-child {
margin-top: 0;
}
ul:last-child,
ol:last-child {
margin-bottom: 0;
}
blockquote {
border-left: 4px solid #dfe2e5;
padding: 0 15px;
color: #777777;
}
blockquote blockquote {
padding-right: 0;
}
table {
padding: 0;
word-break: initial;
}
table tr {
border: 1px solid #dfe2e5;
margin: 0;
padding: 0;
}
table tr:nth-child(2n),
thead {
background-color: #f8f8f8;
}
table th {
font-weight: bold;
border: 1px solid #dfe2e5;
border-bottom: 0;
margin: 0;
padding: 6px 13px;
}
table td {
border: 1px solid #dfe2e5;
margin: 0;
padding: 6px 13px;
}
table th:first-child,
table td:first-child {
margin-top: 0;
}
table th:last-child,
table td:last-child {
margin-bottom: 0;
}
.CodeMirror-lines {
padding-left: 4px;
}
.code-tooltip {
box-shadow: 0 1px 1px 0 rgba(0,28,36,.3);
border-top: 1px solid #eef2f2;
}
.md-fences,
code,
tt {
border: 1px solid #e7eaed;
background-color: #f8f8f8;
border-radius: 3px;
padding: 0;
padding: 2px 4px 0px 4px;
font-size: 0.9em;
}
code {
background-color: #f3f4f4;
padding: 0 2px 0 2px;
}
.md-fences {
margin-bottom: 15px;
margin-top: 15px;
padding-top: 8px;
padding-bottom: 6px;
}
.md-task-list-item > input {
margin-left: -1.3em;
}
@media print {
html {
font-size: 13px;
}
table,
pre {
page-break-inside: avoid;
}
pre {
word-wrap: break-word;
}
}
.md-fences {
background-color: #f8f8f8;
}
#write pre.md-meta-block {
padding: 1rem;
font-size: 85%;
line-height: 1.45;
background-color: #f7f7f7;
border: 0;
border-radius: 3px;
color: #777777;
margin-top: 0 !important;
}
.mathjax-block>.code-tooltip {
bottom: .375rem;
}
.md-mathjax-midline {
background: #fafafa;
}
#write>h3.md-focus:before{
left: -1.5625rem;
top: .375rem;
}
#write>h4.md-focus:before{
left: -1.5625rem;
top: .285714286rem;
}
#write>h5.md-focus:before{
left: -1.5625rem;
top: .285714286rem;
}
#write>h6.md-focus:before{
left: -1.5625rem;
top: .285714286rem;
}
.md-image>.md-meta {
/*border: 1px solid #ddd;*/
border-radius: 3px;
padding: 2px 0px 0px 4px;
font-size: 0.9em;
color: inherit;
}
.md-tag {
color: #a7a7a7;
opacity: 1;
}
.md-toc {
margin-top:20px;
padding-bottom:20px;
}
.sidebar-tabs {
border-bottom: none;
}
#typora-quick-open {
border: 1px solid #ddd;
background-color: #f8f8f8;
}
#typora-quick-open-item {
background-color: #FAFAFA;
border-color: #FEFEFE #e5e5e5 #e5e5e5 #eee;
border-style: solid;
border-width: 1px;
}
/** focus mode */
.on-focus-mode blockquote {
border-left-color: rgba(85, 85, 85, 0.12);
}
header, .context-menu, .megamenu-content, footer{
font-family: "Segoe UI", "Arial", sans-serif;
}
.file-node-content:hover .file-node-icon,
.file-node-content:hover .file-node-open-state{
visibility: visible;
}
.mac-seamless-mode #typora-sidebar {
background-color: #fafafa;
background-color: var(--side-bar-bg-color);
}
.md-lang {
color: #b4654d;
}
/*.html-for-mac {
--item-hover-bg-color: #E6F0FE;
}*/
#md-notification .btn {
border: 0;
}
.dropdown-menu .divider {
border-color: #e5e5e5;
opacity: 0.4;
}
.ty-preferences .window-content {
background-color: #fafafa;
}
.ty-preferences .nav-group-item.active {
color: white;
background: #999;
}
.menu-item-container a.menu-style-btn {
background-color: #f5f8fa;
background-image: linear-gradient( 180deg , hsla(0, 0%, 100%, 0.8), hsla(0, 0%, 100%, 0));
}
2021-08-13 01:33:46 +00:00
2021-07-10 09:34:53 +00:00
< / style > < title > Qt编写的可视化大屏系统开发及使用说明< / title >
< / head >
2021-09-26 01:50:09 +00:00
< body class = 'typora-export os-windows typora-export-show-outline typora-export-collapse-outline' > < div class = 'typora-export-content' >
< div class = "typora-export-sidebar" > < div class = "outline-content" > < li class = "outline-item-wrapper outline-h2 outline-item-open" > < div class = "outline-item" > < span class = "outline-expander" > < / span > < a class = "outline-label" href = "#0-前言" > 0 前言< / a > < / div > < ul class = "outline-children" > < li class = "outline-item-wrapper outline-h3 outline-item-single" > < div class = "outline-item" > < span class = "outline-expander" > < / span > < a class = "outline-label" href = "#01-编译说明" > 0.1 编译说明< / a > < / div > < ul class = "outline-children" > < / ul > < / li > < li class = "outline-item-wrapper outline-h3 outline-item-single" > < div class = "outline-item" > < span class = "outline-expander" > < / span > < a class = "outline-label" href = "#02-版本说明" > 0.2 版本说明< / a > < / div > < ul class = "outline-children" > < / ul > < / li > < li class = "outline-item-wrapper outline-h3 outline-item-single" > < div class = "outline-item" > < span class = "outline-expander" > < / span > < a class = "outline-label" href = "#03-体验地址" > 0.3 体验地址< / a > < / div > < ul class = "outline-children" > < / ul > < / li > < li class = "outline-item-wrapper outline-h3 outline-item-single" > < div class = "outline-item" > < span class = "outline-expander" > < / span > < a class = "outline-label" href = "#04-功能特点" > 0.4 功能特点< / a > < / div > < ul class = "outline-children" > < / ul > < / li > < / ul > < / li > < li class = "outline-item-wrapper outline-h2 outline-item-open" > < div class = "outline-item" > < span class = "outline-expander" > < / span > < a class = "outline-label" href = "#1-操作说明" > 1 操作说明< / a > < / div > < ul class = "outline-children" > < li class = "outline-item-wrapper outline-h3" > < div class = "outline-item" > < span class = "outline-expander" > < / span > < a class = "outline-label" href = "#11-使用方法" > 1.1 使用方法< / a > < / div > < ul class = "outline-children" > < li class = "outline-item-wrapper outline-h4 outline-item-single" > < div class = "outline-item" > < span class = "outline-expander" > < / span > < a class = "outline-label" href = "#111-启动窗体" > 1.1.1 启动窗体< / a > < / div > < ul class = "outline-children" > < / ul > < / li > < li class = "outline-item-wrapper outline-h4 outline-item-single" > < div class = "outline-item" > < span class = "outline-expander" > < / span > < a class = "outline-label" href = "#112-系统菜单" > 1.1.2 系统菜单< / a > < / div > < ul class = "outline-children" > < / ul > < / li > < li class = "outline-item-wrapper outline-h4 outline-item-single" > < div class = "outline-item" > < span class = "outline-expander" > < / span > < a class = "outline-label" href = "#113-模块菜单" > 1.1.3 模块菜单< / a > < / div > < ul class = "outline-children" > < / ul > < / li > < li class = "outline-item-wrapper outline-h4 outline-item-single" > < div class = "outline-item" > < span class = "outline-expander" > < / span > < a class = "outline-label" href = "#114-布局切换" > 1.1.4 布局切换< / a > < / div > < ul class = "outline-children" > < / ul > < / li > < li class = "outline-item-wrapper outline-h4 outline-item-single" > < div class = "outline-item" > < span class = "outline-expander" > < / span > < a class = "outline-label" href = "#115-新建布局" > 1.1.5 新建布局< / a > < / div > < ul class = "outline-children" > < / ul > < / li > < li class = "outline-item-wrapper outline-h4 outline-item-single" > < div class = "outline-item" > < span class = "outline-expander" > < / span > < a class = "outline-label" href = "#116-全局换肤" > 1.1.6 全局换肤< / a > < / div > < ul class = "outline-children" > < / ul > < / li > < li class = "outline-item-wrapper outline-h4 outline-item-single" > < div class = "outline-item" > < span class = "outline-expander" > < / span > < a class = "outline-label" href = "#117-模块拖动" > 1.1.7 模块拖动< / a > < / div > < ul class = "outline-children" > < / ul > < / li > < li class = "outline-item-wrapper outline-h4 outline-item-single" > < div class = "outline-item" > < span class = "outline-expander" > < / span > < a class = "outline-label" href = "#118-调整间距" > 1.1.8 调整间距< / a > < / div > < ul class = "outline-children" > < / ul > < / li > < / ul > < / li > < li class = "outline-item-wrapper outline-h3" > < div class = "outline-item" > < span class = "outline-expander" > < / span > < a class = "outline-label" href = "#12-系统设置" > 1.2 系统设置< / a > < / div > < ul class = "outline-children" > < li class = "outline-item-wrapper outline-h4 outline-item-single" > < div class = "outline-item" > < span class = "outline-expander" > < / span > < a class = "outline-label" href = "#121-基本设置" > 1.2.1 基本设置< / a > < / div > < ul class = "
< span > < / span > < img src = "snap/1-1-1-1.jpg" referrerpolicy = "no-referrer" > < / p > < p > < span > 大屏系统效果图: < / span > < img src = "snap/1-1-1-2.jpg" referrerpolicy = "no-referrer" > < / p > < p > < span > 模块演示效果图: < / span > < img src = "snap/1-1-1-3.jpg" referrerpolicy = "no-referrer" > < / p > < p > < span > 控件演示效果图: < / span > < img src = "snap/1-1-1-4.jpg" referrerpolicy = "no-referrer" > < / p > < h4 id = '112-系统菜单' > < span > 1.1.2 系统菜单< / span > < / h4 > < p > < span > 在大屏的顶部中间标题栏或者子模块以外的标题栏,鼠标右键弹出的是系统的菜单,包括布局切换和样式切换等。< / span >
< span > < / span > < img src = "snap/1-1-2-1.jpg" referrerpolicy = "no-referrer" >
2021-07-10 09:34:53 +00:00
< span > < / span > < img src = "snap/1-1-2-2.jpg" referrerpolicy = "no-referrer" > < / p > < h4 id = '113-模块菜单' > < span > 1.1.3 模块菜单< / span > < / h4 > < p > < span > < / span > < img src = "snap/1-1-3-1.jpg" referrerpolicy = "no-referrer" >
< span > < / span > < img src = "snap/1-1-3-2.jpg" referrerpolicy = "no-referrer" >
2021-09-26 01:50:09 +00:00
< span > 在模块的标题栏, 鼠标右键弹出的是模块可视化的菜单, 这个是Qt内置生成的, 加载了多少个子模块就会生成多少个菜单项, 可以对每个模块进行显示隐藏切换。< / span > < / p > < h4 id = '114-布局切换' > < span > 1.1.4 布局切换< / span > < / h4 > < p > < span > 在弹出的系统菜单选择布局方案,在弹出的二级菜单选择默认已经设置好的布局方案,直接切换即可。< / span > < / p > < h4 id = '115-新建布局' > < span > 1.1.5 新建布局< / span > < / h4 > < p > < span > 在弹出的系统菜单选择新建布局,在弹出的框中输入布局名称,确认后,自由拖动调整模块位置,打开模块、隐藏模块,之后单击保存布局即可。< / span > < / p > < h4 id = '116-全局换肤' > < span > 1.1.6 全局换肤< / span > < / h4 > < p > < span > 在弹出的系统菜单选择配色方案,在弹出的二级菜单选择对应的配色方案,默认有四种:紫色风格、蓝色风格、深蓝风格、黑色风格。< / span > < / p > < h4 id = '117-模块拖动' > < span > 1.1.7 模块拖动< / span > < / h4 > < p > < span > 鼠标移动到子模块的标题栏,鼠标按下可以拖动这个模块到任意位置,模块也可以拖动独立位置展示,也可以嵌入到对应布局中,拖动好位置以后自动保存到布局方案,下次启动自动应用。双击模块标题栏可以剥离窗体使之悬浮。< / span > < / p > < h4 id = '118-调整间距' > < span > 1.1.8 调整间距< / span > < / h4 > < p > < span > 鼠标移动到模块与模块的边缘,鼠标变成调整间距样式,可以左右或者上下拉动,调整好间距以后自动保存到布局方案,下次启动自动应用。< / span > < / p > < h3 id = '12-系统设置' > < span > 1.2 系统设置< / span > < / h3 > < p > < strong > < span > 系统设置中的参数,可能会不定期做调整和修改及增加,下面的图示和参数描述未必全部一致,以最新的为准。< / span > < / strong >
< span > < / span > < img src = "snap/1-2-1.jpg" referrerpolicy = "no-referrer" > < / p > < h4 id = '121-基本设置' > < span > 1.2.1 基本设置< / span > < / h4 > < p > < span > < / span > < img src = "snap/1-2-1-1.jpg" referrerpolicy = "no-referrer" > < / p > < ol start = '' > < li > < span > 开机启动:默认关闭,开启后软件会随系统启动而启动。< / span > < / li > < li > < span > 模块拖动:默认开启,开启后模块可以自由拖动到合适的位置松开,一般在布局固定后在关闭,防止使用者在现场又托乱了。< / span > < / li > < li > < span > 切左下角:开启裁掉左下角以后,左侧底部和整体底部合并为一体,作为全局底部的一部分,就可以拖动模块到左侧底部,否则左侧底部作为左侧的一部分。< / span > < / li > < li > < span > 切右下角:开启裁掉右下角以后,右侧底部和整体底部合并为一体,作为全局底部的一部分,就可以拖动模块到右侧底部,否则右侧底部作为右侧的一部分。< / span > < / li > < li > < span > 定位线条: 系统中曲线图表内置了定位线条, 比如1月份, 方便查看, 可以开启。< / span > < / li > < li > < span > 百分符号: 系统中曲线图表Y轴, 有时候需要按照 100% 后面带百分比符号显示。< / span > < / li > < li > < span > 隐藏鼠标: 鼠标未操作多久自动隐藏鼠标指针, 默认5秒钟。< / span > < / li > < li > < span > 启动窗体:选择程序运行的启动窗体,默认大屏系统,还可选择控件演示、模块演示。< / span > < / li > < li > < span > 工作模式:默认工作模式是模拟数据,还可以选择数据库采集、串口采集(未实现)、网络采集(未实现)、网络请求。< / span > < / li > < li > < span > 地图样式:可选择静态图片、闪烁效果、迁徙效果、世界地图、区域地图多种样式,如果没有开启浏览器模块则自动采用静态图片的方式,区域地图默认是江西省吉安市,可以在代码中修改。< / span > < / li > < li > < span > 布局方案:和系统右键菜单中的布局方案功能一样。< / span > < / li > < li > < span > 软件标题:软件的标题文字,显示在软件中间顶部。< / span > < / li > < li > < span > 请求地址:工作模式选择网络请求的时候发送的网络请求地址。< / span > < / li > < / ol > < h4 id = '122-视频设置' > < span > 1.2.2 视频设置< / span > < / h4 > < pre class = "md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded" spellcheck = "false" lang = "cpp" style = "break-inside: unset;" > < div class = "CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang = "cpp" > < div style = "overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.29412px; left: 42.9832px;" > < textarea autocorrect = "off" autocapitalize = "off" spellcheck = "false" tabindex = "0" style = "position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;" > < / textarea > < / div > < div class = "CodeMirror-scrollbar-filler" cm-not-content = "true" > < / div > < div class = "CodeMirror-gutter-filler" cm-not-content = "true" > < / div > < div class = "CodeMirror-scroll" tabindex = "-1" > < div class = "CodeMirror-sizer" style = "margin-left: 35px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;" > < div style = "position: relative; top: 0px;" > < div class = "CodeMirror-lines" role = "presentation" > < div role = "presentation" style = "position: relative; outline: none;" > < div class = "CodeMirror-measure" > < / div > < div class = "CodeMirror-measure" > < / div > < div style = "position: relative; z-index: 1;" > < / div > < div class = "CodeMirror-code" role = "presentation" style = "" > < div class = "CodeMirror-activeline" style = "position: relative;" > < div class = "CodeMirror-activeline-background CodeMirror-linebackground" > < / div > < div class = "CodeMirror-gutter-background CodeMirror-activeline-gutter" style = "left: -34.9916px; width: 35px;" > < / div > < div class = "CodeMirror-gutter-wrapper CodeMirror-activeline-gutter" style = "left: -34.9916px;" > < div class = "CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show" style = "left: 0px; width: 27px;" > 1< / div > < / div > < pre class = " CodeMirror-line " role = "presentation" > < span role = "presentation" style = "padding-right: 0.1px;" > < span class = "cm-variable" > QStringList< /span
2021-07-10 09:34:53 +00:00
< span > 采集间隔设置不用做说明,一看就懂,单位毫秒,可定制每个模块都对应自己的采集方式、数据库、间隔等。< / span > < / p > < h4 id = '124-数据库设置' > < span > 1.2.4 数据库设置< / span > < / h4 > < p > < span > < / span > < img src = "snap/1-2-4-1.jpg" referrerpolicy = "no-referrer" >
< span > 理论上支持Qt支持的所有数据库, 和具体程序无关, 只要有对应的数据库的动态库和插件库就行, 或者支持odbc数据源也可以, 程序打通了odbc数据源的通信方式, 所以支持各种数据库, 可以先自己用对应的数据库工具连接数据库试试, 通了数据库正常后在来测试程序。< / span >
< span > 亲测 Sqlite( Qt内置无需额外动态库) 、MySql( 高版本Qt需要自行编译插件) 、PostgreSQL( 开源免费的数据库, 很好用) 、SqlServer( 需要设置ODBC数据源) 、kingbase( 国产人大金仓数据库, 该数据库其实是基于PostgreSQL改的, 通过odbc数据源方式测试无误) 。< / span >
< span > 连接测试用来测试当前选择的数据库类型以及数据库信息,是否能连接数据库正常,可以避免数据库不通的情况下用来检测是否信息填写正确。< / span >
< span > 初始化数据库按钮用来执行sql脚本来生成对应的数据库, 部分数据库支持数据库文件不存在的情况下通过sql语句来创建数据库, 比如mysql、postgres等就支持直接sql语句新建数据库, 有部分数据库可能不支持, 需要手动先在数据库管理工具中新建好数据库, 然后再来这里执行初始化数据库用来新建表和初始数据。< / span > < / p > < h3 id = '13-工作模式' > < span > 1.3 工作模式< / span > < / h3 > < p > < span > < / span > < img src = "snap/1-3-1-1.jpg" referrerpolicy = "no-referrer" >
< span > 本系统支持多种工作模式,以便适应各种需求,默认采用随机模拟数据,大屏基础版本也采用此工作模式。< / span > < / p > < h4 id = '131-模拟数据' > < span > 1.3.1 模拟数据< / span > < / h4 > < p > < span > 如果工作模式选择的是模拟数据,则采用随机数模拟生成数据并设置。< / span > < / p > < h4 id = '132-数据库采集' > < span > 1.3.2 数据库采集< / span > < / h4 > < p > < strong > < span > 具体数据库表字段说明参见后面的数据库说明。< / span > < / strong >
< span > 如果工作模式选择的是数据库采集,则会自动连接设置的数据库,可以用对应的数据库管理工具连接数据库,打开对应的表,然后更改其中的数据,保存,可看到对应的数据反应到界面上。< / span >
< span > 系统支持一个系统下的软件远程访问另一个系统下的数据库, 比如linux系统或者mac系统远程访问win系统上的mysql数据库, 数据库也可以放在云端比如阿里云( 亲测无误) , 只要对应IP和端口可达就行, 验证是否可达可以用对应的数据库管理工具连接即可。< / span >
2021-09-26 01:50:09 +00:00
< span > 理论上odbc的方式支持多种数据库, 比如sql server, oracle, postgresql等, 所以如果没有插件支持的数据库可以考虑用odbc的方式, odbc也是跨平台的。< / span > < / p > < p > < span > 如果需要远程访问mysql数据库, mysql数据库需要设置用户 root@%< / span >
< span > < / span > < img src = "snap/1-3-2-1.jpg" referrerpolicy = "no-referrer" >
2021-07-10 09:34:53 +00:00
< span > sql server数据库的配置规则, 下面的链接只是参考, 基本上正常电脑安装好以后都不需要下面的配置。< / span >
< a href = 'https://blog.csdn.net/mozhi111/article/details/80281388' target = '_blank' class = 'url' > https://blog.csdn.net/mozhi111/article/details/80281388< / a >
< a href = 'https://blog.csdn.net/happymagic/article/details/8673476' target = '_blank' class = 'url' > https://blog.csdn.net/happymagic/article/details/8673476< / a > < / p > < p > < span > 远程访问sql server数据库, 需要在运行软件的电脑上也需要配置数据源, 不然很可能无法访问。< / span > < / p > < p > < strong > < span > sql server数据库配置步骤< / span > < / strong > < / p > < ol start = '' > < li > < span > 第一步: 安装好sql server数据库, 比如sql server 2014, 设置混合验证模式并设置密码。< / span > < / li > < li > < span > 第二步: 打开sql server management studio, 左侧, 新建数据库bigscreen。< / span > < / li > < li > < span > 第三步: 新建odbc数据源, cmd执行命令odbcad32打开数据源配置, 命名为bigscreen, 关联到数据库bigscreen。< / span >
2021-09-26 01:50:09 +00:00
< span > 切记: Qt中连接sqlserver数据库采用的odbc方式, 数据库名填写的是数据源中的名称, 而不是数据库中的数据库名称, 比如数据源名字是aaa, 关联到数据库bbb, 连接的数据库名称是填写aaa而不是bbb。< / span > < / li > < / ol > < p > < span > 安装PostgreSQL数据库之后, 默认只能本地访问连接。如果想在其他主机上访问PostgreSQL数据库服务器, 就需要进行相应的配置。< / span >
< a href = 'https://blog.csdn.net/weixin_36816337/article/details/81739819' target = '_blank' class = 'url' > https://blog.csdn.net/weixin_36816337/article/details/81739819< / a >
< span > < / span > < img src = "snap/1-3-2-2.jpg" referrerpolicy = "no-referrer" >
2021-07-10 09:34:53 +00:00
< span > 人大金仓数据库kingbase, 其实就是postgresql数据库改的, 如果是WIN10系统建议安装在系统盘以外, 不然没有权限, 导致奇奇怪怪的问题。< / span > < / p > < p > < strong > < span > 特别提示< / span > < / strong >
< span > 数据库有位数区分, 如果是32位的qt, 对应打包目录要放32位的数据库的dll, 比如放32位的libmysql.dll, 不然会提示找不到驱动, 而无论32位还是64位的qt程序, 都能连接64位的数据库。 < / span >
< span > 意思是在开发阶段, 必须放正确位数的dll, 而数据库只需要安装64位的即可。sqlserver数据库采用odbc数据源的方式进行连接, 而且是微软亲生的, 估计在系统层做了无微不至的关怀, qt程序发布的时候啥也不用带。< / span > < / p > < h4 id = '133-串口采集' > < span > 1.3.3 串口采集< / span > < / h4 > < p > < span > 需要定制协议, 比如RS232、RS485、Modbus、Mqtt等< / span > < / p > < h4 id = '134-网络采集' > < span > 1.3.4 网络采集< / span > < / h4 > < p > < span > 需要定制协议, 比如tcp client、tcp server、udp client、udp server、websocket等。< / span > < / p > < h4 id = '135-网络请求' > < span > 1.3.5 网络请求< / span > < / h4 > < p > < span > < / span > < img src = "snap/1-3-5-1.jpg" referrerpolicy = "no-referrer" >
< span > 找到bigscreen可执行文件所在目录下的httpserver文件, 双击运行, 切换到网络请求服务器页面, 回复数据选择文件内容, 单击启动服务器, 左侧消息栏可以看到实时打印的数据, 从json文件读取的数据, 实际中可以是从数据库中采集的数据等。< / span >
2021-09-26 01:50:09 +00:00
< span > 网络请求客户端/服务器工具httpserver, 也是纯Qt编写的工具。< / span > < / p > < p > < strong > < span > 功能特点< / span > < / strong > < / p > < ol start = '' > < li > < span > 支持多个客户端连接并发同时处理, 100个毫无压力。< / span > < / li > < li > < span > 可设置http请求是长连接还是短连接, 默认长连接。< / span > < / li > < li > < span > 支持多种回复数据格式, 其中包括网页内容、json数据等。< / span > < / li > < li > < span > 服务端示例中同时包含读取文件回复、读取数据库回复。< / span > < / li > < li > < span > 支持8种配色方案( 暗黑、灰黑、深绿、浅黄、深蓝、深黑、暗蓝、默认) 。< / span > < / li > < li > < span > 客户端可指定请求地址,服务端可指定网卡和端口进行监听。< / span > < / li > < li > < span > 所有请求和连接都有计数, 所有在线请求的IP和端口都显示在表格中。< / span > < / li > < li > < span > 可以提供一个简易的网页配置服务, 包括交互, 作为设备的web配置。< / span > < / li > < li > < span > 可自由拓展增加权限校验等, 作为一个http请求服务器。< / span > < / li > < li > < span > 纯Qt实现, 代码框架整洁, 注释完整, 支持任意Qt版本、任意编译器、任意操作系统。< / span > < / li > < / ol > < h4 id = '136-请求格式' > < span > 1.3.6 请求格式< / span > < / h4 > < p > < span > 请求地址:< / span > < a href = 'http://127.0.0.1:6000' target = '_blank' class = 'url' > http://127.0.0.1:6000< / a > < span > 可以自行在系统设置中更改。< / span > < / p > < h5 id = '1361-请求数据' > < span > 1.3.6.1 请求数据< / span > < / h5 > < p > < span > 其他表请求格式完全一致。< / span >
< span > tag=t_1_1_mold_prod_total& tableName=t_1_1_mold_prod_total& columnName=name,prod_1,prod_2< / span > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 名称< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > tag< / span > < / td > < td style = 'text-align:left;' > < span > 标识符,用于服务端接收到请求后按照这个标识符返回数据,这里内容填的是具体的表名,方便收到数据直接解析并发送信号到对应模块窗体显示数据。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > tableName< / span > < / td > < td style = 'text-align:left;' > < span > 要查询的表名。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > columnName< / span > < / td > < td style = 'text-align:left;' > < span > 对应表的字段名称集合,用英文逗号隔开。< / span > < / td > < / tr > < / tbody > < / table > < / figure > < h5 id = '1362-返回数据' > < span > 1.3.6.2 返回数据< / span > < / h5 > < pre class = "md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded" spellcheck = "false" lang = "json" style = "break-inside: unset;" > < div class = "CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang = "json" > < div style = "overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.29412px; left: 42.9832px;" > < textarea autocorrect = "off" autocapitalize = "off" spellcheck = "false" tabindex = "0" style = "position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;" > < / textarea > < / div > < div class = "CodeMirror-scrollbar-filler" cm-not-content = "true" > < / div > < div class = "CodeMirror-gutter-filler" cm-not-content = "true" > < / div > < div class = "CodeMirror-scroll" tabindex = "-1" > < div class = "CodeMirror-sizer" style = "margin-left: 35px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;" > < div style = "position: relative; top: 0px;" > < div class = "CodeMirror-lines" role = "presentation" > < div role = "presentation" style = "position: relative; outline: none;" > < div class = "CodeMirror-measure" > < pre > < span > xxxxxxxxxx< / span > < / pre > < div class = "CodeMirror-linenumber CodeMirror-gutter-elt" > < div > 19< / div > < / div > < / div > < div class = "CodeMirror-measure" > < / div > < div style = "position: relative; z-index: 1;" > < / div > < div class = "CodeMirror-code" role = "presentation" style = "" > < div class = "CodeMirror-activeline" style = "position: relative;" > < div class = "CodeMirror-activeline-background CodeMirror-linebackground" > < / div > < div class = "CodeMirror-gutter-background CodeMirror-activeline-gutter" style = "left: -34.9916px; width: 35px;" > < / div > < div class = "CodeMirror-gutter-wrapper CodeMirror-activeline-gutter" style = "left: -34.9916px;" > < div class = "CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show" style = "left: 0px; width: 27px;" > 1< / div > < / div > < pre class = " CodeMirror-line " role = "presentation" > < span role = "presentation" style = "padding-right: 0.1px;" > {< / span > < / pre > < / div > < div style = "position: relative;" > < div class = "CodeMirror-gutter-wrapper" style = "left: -34.9916px;" > < div class = "CodeMirror-linenumber CodeMirror-gutter-elt" style = "left: 0px; width: 27px;" > 2< / div > < / div > < pre class = " CodeMirror-line " role = "presentation" > < span role = "presentation" style = "padding-right: 0.1px;" > < span class = "cm-tab" role = "presentation" cm-text = " " > < / span > < span class = "cm-string cm-property" > "tag"< / span > : < span class = "cm-string" > "t_1_1_mold_prod_total"< / span > ,< / span > < / pre > < / div > < div style = "position: relative;" > < div class = "CodeMirror-gutter-wrapper" style = "left: -34.9916px;" > < div class = "CodeMirror-linenumber CodeMirror-gutter-elt" style = "left: 0px; width: 27px;" > 3< / div > < / div > < pre class = " CodeMirror-line " role = "presentation" > < span role = "presentation" style = "padding-right: 0.1px;" > < span class = "cm-tab" role = "presentation" cm-text = " " > < / span > < span class = "cm-string cm-property" > "result"< / span > : [{< / span > < / pre > < / div > < div style = "position: relative;" > < div class = "CodeMirror-gutter-wrapper" style = "left: -34.9916px;" > < div class = "CodeMirror-linenumber CodeMirror-gutter-elt" style = "left: 0px; width: 27px;" > 4< / div > < / div > < pre class = " CodeMirror-line " role = "presentation" > < span role = "prese
2021-07-10 09:34:53 +00:00
< span > 具体解析数据在datahttp类中, 如果是自定义的表和字段, 则需要在datahttp类中的initTable方法自行添加表名和字段名即可, 非常方便, 一个表只需要增加一行代码。< / span > < / p > < h4 id = '137-拓展构想' > < span > 1.3.7 拓展构想< / span > < / h4 > < p > < span > 现在数据采集无论是数据库采集还是网络请求采集,对应的表名和字段名都是写死在代码中,尽管目前已经封装好了可以自行添加表和字段,但是还不够通用,后期打算通过从配置文件读取。< / span > < / p > < h3 id = '14-其他说明' > < span > 1.4 其他说明< / span > < / h3 > < ol start = '' > < li > < span > 可执行文件同级文件夹有layout+layout_1440+layout_1920, 程序默认自动识别分辨率并加载对应的布局文件夹, 比如1920分辨率则从layout_1920文件夹加载布局, 并作为整体布局文件夹。< / span > < / li > < li > < span > 如果发现布局拖动乱了,可以直接鼠标右键选择恢复布局即可,在保存布局以前。< / span > < / li > < li > < span > 在中间地图模块鼠标右键可以弹出菜单,切换布局和配色方案等。< / span > < / li > < li > < span > 在模块的标题栏上右键可以弹出默认的dock菜单, 用来显示和隐藏各模块。< / span > < / li > < li > < span > 软件关闭过程中会自动保存布局,下次启动以后自动应用。< / span > < / li > < li > < span > 如果使用的默认的配色方案比如紫色风格,则配置文件中的颜色全部无效,会自动应用代码中的颜色,如果需要启用自定义的颜色,则需要先将配置文件的皮肤参数修改成 Theme=\x81ea\x5b9a\x4e49\x98ce\x683c 即可。此时打开软件会应用配置文件中的颜色。< / span > < / li > < li > < span > 右键菜单可以截图保存,默认命名为 配色方案名称_布局方案名称.png 保存在snap目录下。< / span > < / li > < li > < span > 在二级窗体的标题栏上右键弹出模块菜单,可以对单个模块打开关闭,其他地方右键全局菜单。< / span > < / li > < / ol > < h2 id = '2-数据库说明' > < span > 2 数据库说明< / span > < / h2 > < p > < span > 数据库表的设计按照模块的顺序, 比如frmmodule1主模块中包括4个子模块, 每个子模块都对应一个表, 所有表名的前缀是 t_ 以便区分,第一个数字表示主模块编号,第二个数字表示子模块编号。< / span >
< span > 表名格式如下:< / span > < / p > < ul > < li > < span > t_1_1_mold_prod_total< / span > < / li > < li > < span > t_1_2_mold_prod_monthly< / span > < / li > < li > < span > t_1_3_wp_prod_total< / span > < / li > < li > < span > t_1_4_wp_prod_monthly。< / span > < / li > < / ul > < p > < span > 源码目录下的bigscreen.sql为数据库脚本, 可以在系统设置中单击初始化数据来执行。< / span >
< span > 如果是需要对接自己的系统,可能涉及到部分数据不一致的情况,你可以:< / span >
< span > 第一:尽量用现有的表,现有的表各种各样都有,你找到你类似的往里面填数据就行。< / span >
2021-09-26 01:50:09 +00:00
< span > 第二:如果没有合适的表,则需要调整对应的模块代码。< / span > < / p > < h3 id = '21-产量汇总模块' > < span > 2.1 产量汇总模块< / span > < / h3 > < p > < span > < / span > < img src = "snap/2-1-1.jpg" referrerpolicy = "no-referrer" > < / p > < p > < span > 子模块表名对应表:< / span > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 子模块标题< / span > < / th > < th style = 'text-align:left;' > < span > 子模块表名< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > 模具产量< / span > < / td > < td style = 'text-align:left;' > < span > t_1_1_mold_prod_total< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > 每月模具产量趋势图< / span > < / td > < td style = 'text-align:left;' > < span > t_1_2_mold_prod_monthly< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > 零件产量< / span > < / td > < td style = 'text-align:left;' > < span > t_1_3_wp_prod_total< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > 每月零件产量趋势图< / span > < / td > < td style = 'text-align:left;' > < span > t_1_4_wp_prod_monthly< / span > < / td > < / tr > < / tbody > < / table > < / figure > < h4 id = '211-模具产量' > < span > 2.1.1 模具产量< / span > < / h4 > < p > < span > < / span > < img src = "snap/2-1-1-1.jpg" referrerpolicy = "no-referrer" > < / p > < p > < span > 表名: t_1_1_mold_prod_total< / span > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 字段名< / span > < / th > < th style = 'text-align:left;' > < span > 中文名< / span > < / th > < th style = 'text-align:left;' > < span > 类型< / span > < / th > < th style = 'text-align:left;' > < span > 长度< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > internal_id< / span > < / td > < td style = 'text-align:left;' > < span > 序号< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 11< / span > < / td > < td style = 'text-align:left;' > < span > 主键自增< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > name< / span > < / td > < td style = 'text-align:left;' > < span > 名称< / span > < / td > < td style = 'text-align:left;' > < span > VARCHAR< / span > < / td > < td style = 'text-align:left;' > < span > 255< / span > < / td > < td style = 'text-align:left;' > < span > 不为空< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > prod_1< / span > < / td > < td style = 'text-align:left;' > < span > 系列1< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 11< / span > < / td > < td style = 'text-align:left;' > < span > :------< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > prod_2< / span > < / td > < td style = 'text-align:left;' > < span > 系列2< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 11< / span > < / td > < td style = 'text-align:left;' > < span > :------< / span > < / td > < / tr > < / tbody > < / table > < / figure > < p > < span > 默认数据:< / span > < / p > < figure > < table > < thead > < tr > < th > < span > internal_id< / span > < / th > < th > < span > name< / span > < / th > < th > < span > prod_1< / span > < / th > < th > < span > prod_2< / span > < / th > < / tr > < / thead > < tbody > < tr > < td > < span > 1< / span > < / td > < td > < span > 设变< / span > < / td > < td > < span > 14< / span > < / td > < td > < span > 12< / span > < / td > < / tr > < tr > < td > < span > 2< / span > < / td > < td > < span > 修模< / span > < / td > < td > < span > 20< / span > < / td > < td > < span > 25< / span > < / td > < / tr > < tr > < td > < span > 3< / span > < / td > < td > < span > 新模< / span > < / td > < td > < span > 40< / span > < / td > < td > < span > 25< / span > < / td > < / tr > < / tbody > < / table > < / figure > < h4 id = '212-每月模具产量趋势图' > < span > 2.1.2 每月模具产量趋势图< / span > < / h4 > < p > < span > < / span > < img src = "snap/2-1-2-1.jpg" referrerpolicy = "no-referrer" > < / p > < p > < span > 表名: t_1_2_mold_prod_monthly< / span > < span > < / span > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 字段名< / span > < / th > < th style = 'text-align:left;' > < span > 中文名< / span > < / th > < th style = 'text-align:left;' > < span > 类型< / span > < / th > < th style = 'text-align:left;' > < span > 长度< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > internal_id< / span > < / td > < td style = 'text-align:left;' > < span > 序号< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 11< / span > < / td > < td style = 'text-align:left;' > < span > 主键自<EFBFBD> <EFBFBD>
< span > 1< / span > < span > < / span > < span > 60< / span > < span > < / span > < span > 25< / span > < span > < / span > < span > 15< / span > < / p > < h4 id = '243-加工中模具数量' > < span > 2.4.3 加工中模具数量< / span > < / h4 > < p > < span > 界面效果图:在上面< / span > < / p > < p > < span > 表名: t_4_3_mold_processing_num< / span > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 字段名< / span > < / th > < th style = 'text-align:left;' > < span > 中文名< / span > < / th > < th style = 'text-align:left;' > < span > 类型< / span > < / th > < th style = 'text-align:left;' > < span > 长度< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > internal_id< / span > < / td > < td style = 'text-align:left;' > < span > 序号< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 11< / span > < / td > < td style = 'text-align:left;' > < span > 主键自增< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > mold_processing_number< / span > < / td > < td style = 'text-align:left;' > < span > 加工中数量< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 11< / span > < / td > < td style = 'text-align:left;' > < span > 不为空< / span > < / td > < / tr > < / tbody > < / table > < / figure > < p > < span > 默认数据: 87< / span > < / p > < h3 id = '25-负荷分布模块' > < span > 2.5 负荷分布模块< / span > < / h3 > < p > < span > < / span > < img src = "snap/2-5-1.jpg" referrerpolicy = "no-referrer" > < / p > < p > < span > 子模块表名对应表:< / span > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 子模块标题< / span > < / th > < th style = 'text-align:left;' > < span > 子模块表名< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > 工序计划负荷< / span > < / td > < td style = 'text-align:left;' > < span > t_5_1_work_load< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > 当日负荷< / span > < / td > < td style = 'text-align:left;' > < span > t_5_2_work_load_today< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > 负荷百分比< / span > < / td > < td style = 'text-align:left;' > < span > t_5_3_work_load_percent< / span > < / td > < / tr > < / tbody > < / table > < / figure > < h4 id = '251-工序计划负荷' > < span > 2.5.1 工序计划负荷< / span > < / h4 > < p > < span > < / span > < img src = "snap/2-5-1-1.jpg" referrerpolicy = "no-referrer" > < / p > < p > < span > 表名: t_5_1_work_load< / span > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 字段名< / span > < / th > < th style = 'text-align:left;' > < span > 中文名< / span > < / th > < th style = 'text-align:left;' > < span > 类型< / span > < / th > < th style = 'text-align:left;' > < span > 长度< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > internal_id< / span > < / td > < td style = 'text-align:left;' > < span > 序号< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 11< / span > < / td > < td style = 'text-align:left;' > < span > 主键自增< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > process_name< / span > < / td > < td style = 'text-align:left;' > < span > 工序名称< / span > < / td > < td style = 'text-align:left;' > < span > VARCHAR< / span > < / td > < td style = 'text-align:left;' > < span > 255< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > work_load_1< / span > < / td > < td style = 'text-align:left;' > < span > 第1天负荷< / span > < / td > < td style = 'text-align:left;' > < span > VARCHAR< / span > < / td > < td style = 'text-align:left;' > < span > 255< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > work_load_*< / span > < / td > < td style = 'text-align:left;' > < span > 第*天负荷< / span > < / td > < td style = 'text-align:left;' > < span > VARCHAR< / span > < / td > < td style = 'text-align:left;' > < span > 255< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > work_load_7< / span > < / td > < td style = 'text-align:left;' > < span > 第7天负荷< / span > < / td > < td style = 'text-align:left;' > < span > VARCHAR< / span > < / td > < td style = 'text-align:left;' > < span > 255< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < / tbody > < / table > < / figure > < p > < span > 默认数据:< / span > < / p > < figure > < table > < thead > < tr > < th > < span > internal_id< / span > <
< span > 这个设计很巧妙,相当于动态的日期和数据,日期作为标题。< / span > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 字段名< / span > < / th > < th style = 'text-align:left;' > < span > 中文名< / span > < / th > < th style = 'text-align:left;' > < span > 类型< / span > < / th > < th style = 'text-align:left;' > < span > 长度< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > internal_id< / span > < / td > < td style = 'text-align:left;' > < span > 序号< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 11< / span > < / td > < td style = 'text-align:left;' > < span > 主键自增< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > date_1< / span > < / td > < td style = 'text-align:left;' > < span > 第1天日期< / span > < / td > < td style = 'text-align:left;' > < span > VARCHAR< / span > < / td > < td style = 'text-align:left;' > < span > 255< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > date_2< / span > < / td > < td style = 'text-align:left;' > < span > 第2天日期< / span > < / td > < td style = 'text-align:left;' > < span > VARCHAR< / span > < / td > < td style = 'text-align:left;' > < span > 255< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > date_3< / span > < / td > < td style = 'text-align:left;' > < span > 第3天日期< / span > < / td > < td style = 'text-align:left;' > < span > VARCHAR< / span > < / td > < td style = 'text-align:left;' > < span > 255< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > date_4< / span > < / td > < td style = 'text-align:left;' > < span > 第4天日期< / span > < / td > < td style = 'text-align:left;' > < span > VARCHAR< / span > < / td > < td style = 'text-align:left;' > < span > 255< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > date_5< / span > < / td > < td style = 'text-align:left;' > < span > 第5天日期< / span > < / td > < td style = 'text-align:left;' > < span > VARCHAR< / span > < / td > < td style = 'text-align:left;' > < span > 255< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > date_6< / span > < / td > < td style = 'text-align:left;' > < span > 第6天日期< / span > < / td > < td style = 'text-align:left;' > < span > VARCHAR< / span > < / td > < td style = 'text-align:left;' > < span > 255< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > date_7< / span > < / td > < td style = 'text-align:left;' > < span > 第7天日期< / span > < / td > < td style = 'text-align:left;' > < span > VARCHAR< / span > < / td > < td style = 'text-align:left;' > < span > 255< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < / tbody > < / table > < / figure > < p > < span > 默认数据:< / span > < / p > < figure > < table > < thead > < tr > < th > < span > internal_id< / span > < / th > < th > < span > date_1< / span > < / th > < th > < span > date_2< / span > < / th > < th > < span > date_3< / span > < / th > < th > < span > date_4< / span > < / th > < th > < span > date_5< / span > < / th > < th > < span > date_6< / span > < / th > < th > < span > date_7< / span > < / th > < / tr > < / thead > < tbody > < tr > < td > < span > 1< / span > < / td > < td > < span > 2019-04-30< / span > < / td > < td > < span > 2019-05-01< / span > < / td > < td > < span > 2019-05-02< / span > < / td > < td > < span > 2019-05-03< / span > < / td > < td > < span > 2019-05-04< / span > < / td > < td > < span > 2019-05-05< / span > < / td > < td > < span > 2019-05-06< / span > < / td > < / tr > < / tbody > < / table > < / figure > < h4 id = '252-当日负荷' > < span > 2.5.2 当日负荷< / span > < / h4 > < p > < span > < / span > < img src = "snap/2-5-2-1.jpg" referrerpolicy = "no-referrer" > < / p > < p > < span > 表名: t_5_2_work_load_today< / span > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 字段名< / span > < / th > < th style = 'text-align:left;' > < span > 中文名< / span > < / th > < th style = 'text-align:left;' > < span > 类型< / span > < / th > < th style = 'text-align:left;' > < span > 长度< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > internal_id< / span > < / td > < td style = 'text-align:left;' > < span > 序号< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 11< / span > < / td > < td style = 'text-align:left;' > < span > 主键自增< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > group_name< / span > < / td > < td style = 'tex
< span > 1, 100, 99, 89, 95, 95, 92, 98, 100, 96, 97, 98, 99, 90, 85, 84< / span > < / p > < h4 id = '262-电极合格率' > < span > 2.6.2 电极合格率< / span > < / h4 > < p > < span > < / span > < img src = "snap/2-6-2-1.jpg" referrerpolicy = "no-referrer" > < / p > < p > < span > 表名: t_6_2_ele_qual_rate< / span > < span > < / span > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 字段名< / span > < / th > < th style = 'text-align:left;' > < span > 中文名< / span > < / th > < th style = 'text-align:left;' > < span > 类型< / span > < / th > < th style = 'text-align:left;' > < span > 长度< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > internal_id< / span > < / td > < td style = 'text-align:left;' > < span > 序号< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 11< / span > < / td > < td style = 'text-align:left;' > < span > 主键自增< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > date_1< / span > < / td > < td style = 'text-align:left;' > < span > 第1天合格率< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 3< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > date_*< / span > < / td > < td style = 'text-align:left;' > < span > 第*天合格率< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 3< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > date_15< / span > < / td > < td style = 'text-align:left;' > < span > 第15天合格率< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 3< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < / tbody > < / table > < / figure > < p > < span > 默认数据:< / span >
< span > 1, 100, 99, 89, 95, 95, 92, 98, 100, 96, 97, 98, 99, 90, 85, 84< / span > < / p > < h4 id = '263-当天合格率' > < span > 2.6.3 当天合格率< / span > < / h4 > < p > < span > < / span > < img src = "snap/2-6-3-1.jpg" referrerpolicy = "no-referrer" > < / p > < p > < span > 表名: t_6_3_qual_rate_today< / span > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 字段名< / span > < / th > < th style = 'text-align:left;' > < span > 中文名< / span > < / th > < th style = 'text-align:left;' > < span > 类型< / span > < / th > < th style = 'text-align:left;' > < span > 长度< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > internal_id< / span > < / td > < td style = 'text-align:left;' > < span > 序号< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 11< / span > < / td > < td style = 'text-align:left;' > < span > 主键自增< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > qual_rate< / span > < / td > < td style = 'text-align:left;' > < span > 合格率< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 3< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < / tbody > < / table > < / figure > < p > < span > 默认数据: 90< / span > < / p > < h4 id = '264-模具零件合格率' > < span > 2.6.4 模具零件合格率< / span > < / h4 > < p > < span > < / span > < img src = "snap/2-6-4-1.jpg" referrerpolicy = "no-referrer" > < / p > < p > < span > 表名: t_6_4_mold_qual_rate< / span > < span > < / span > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 字段名< / span > < / th > < th style = 'text-align:left;' > < span > 中文名< / span > < / th > < th style = 'text-align:left;' > < span > 类型< / span > < / th > < th style = 'text-align:left;' > < span > 长度< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > internal_id< / span > < / td > < td style = 'text-align:left;' > < span > 序号< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 11< / span > < / td > < td style = 'text-align:left;' > < span > 主键自增< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > mold_name< / span > < / td > < td style = 'text-align:left;' > < span > 模块名称< / span > < / td > < td style = 'text-align:left;' > < span > VARCHAR< / span > < / td > < td style = 'text-align:left;' > < span > 255< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > qual_rate< / span > < / td > < td style = 'text-align:left;' > < span > 合格率< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 3< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < / tbody > < / table > < / figure > < p > < span > 默认数据:< / span > < / p > < figure > < table > < thead > < tr > < th > < span > internal_id< / span > < / th > < th > < span > mold_name< / span > < / th > < th > < span > qual_rate< / span > < / th > < / tr > < / thead > < tbody > < tr > < td > < span > 1< / span > < / td > < td > < span > IK19001< / span > < / td > < td > < span > 95< / span > < / td > < / tr > < tr > < td > < span > 2< / span > < / td > < td > < span > IK19002< / span > < / td > < td > < span > 88< / span > < / td > < / tr > < tr > < td > < span > 3< / span > < / td > < td > < span > IK19003< / span > < / td > < td > < span > 94< / span > < / td > < / tr > < tr > < td > < span > 4< / span > < / td > < td > < span > IK19004< / span > < / td > < td > < span > 75< / span > < / td > < / tr > < tr > < td > < span > 5< / span > < / td > < td > < span > IK19005< / span > < / td > < td > < span > 94< / span > < / td > < / tr > < tr > < td > < span > 6< / span > < / td > < td > < span > IK19006< / span > < / td > < td > < span > 89< / span > < / td > < / tr > < / tbody > < / table > < / figure > < h3 id = '27-品质统计模块' > < span > 2.7 品质统计模块< / span > < / h3 > < p > < span > < / span > < img src = "snap/2-7-1.jpg" referrerpolicy = "no-referrer" > < / p > < p > < span > 子模块表名对应表:< / span > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 子模块标题< / span > < / th > < th style = 'text-align:left;' > < span > 子模块表名< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > 品质占比< / span > < / td > < td style = 'text-align:left;' > < span > t_7_1_qual_percent< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > 班组合格率< / span > < / td > < td style = 'text-align:left;' > < span > t_7_2_group_qual_rate< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > 每日合格率统计< / span > < / td > < td style = 'text-align:left;' > < span > t_7_3_qual_rate_daily<
< span > 表名: t_7_1_qual_percent< / span > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 字段名< / span > < / th > < th style = 'text-align:left;' > < span > 中文名< / span > < / th > < th style = 'text-align:left;' > < span > 类型< / span > < / th > < th style = 'text-align:left;' > < span > 长度< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > internal_id< / span > < / td > < td style = 'text-align:left;' > < span > 序号< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 11< / span > < / td > < td style = 'text-align:left;' > < span > 主键自增< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > green< / span > < / td > < td style = 'text-align:left;' > < span > 绿色百分比< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 3< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > blue< / span > < / td > < td style = 'text-align:left;' > < span > 蓝色百分比< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 3< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > yellow< / span > < / td > < td style = 'text-align:left;' > < span > 黄色百分比< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 3< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > red< / span > < / td > < td style = 'text-align:left;' > < span > 红色百分比< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 3< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < / tbody > < / table > < / figure > < p > < span > 默认数据:< / span >
< span > 1< / span > < span > < / span > < span > 45< / span > < span > < / span > < span > 30< / span > < span > < / span > < span > 15< / span > < span > < / span > < span > 10< / span > < / p > < h4 id = '272-班组合格率' > < span > 2.7.2 班组合格率 < / span > < / h4 > < p > < span > < / span > < img src = "snap/2-7-2-1.jpg" referrerpolicy = "no-referrer" >
< span > 表名: t_7_2_group_qual_rate< / span > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 字段名< / span > < / th > < th style = 'text-align:left;' > < span > 中文名< / span > < / th > < th style = 'text-align:left;' > < span > 类型< / span > < / th > < th style = 'text-align:left;' > < span > 长度< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > internal_id< / span > < / td > < td style = 'text-align:left;' > < span > 序号< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 11< / span > < / td > < td style = 'text-align:left;' > < span > 主键自增< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > group_name< / span > < / td > < td style = 'text-align:left;' > < span > 分组名称< / span > < / td > < td style = 'text-align:left;' > < span > VARCHAR< / span > < / td > < td style = 'text-align:left;' > < span > 255< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > qual_rate< / span > < / td > < td style = 'text-align:left;' > < span > 合格率< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 3< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < / tbody > < / table > < / figure > < p > < span > 默认数据:< / span > < / p > < figure > < table > < thead > < tr > < th > < span > internal_id< / span > < / th > < th > < span > group_name< / span > < / th > < th > < span > qual_rate< / span > < / th > < / tr > < / thead > < tbody > < tr > < td > < span > 1< / span > < / td > < td > < span > CNC< / span > < / td > < td > < span > 90< / span > < / td > < / tr > < tr > < td > < span > 2< / span > < / td > < td > < span > EDM< / span > < / td > < td > < span > 85< / span > < / td > < / tr > < tr > < td > < span > 3< / span > < / td > < td > < span > WEDM< / span > < / td > < td > < span > 92< / span > < / td > < / tr > < tr > < td > < span > 4< / span > < / td > < td > < span > 磨床< / span > < / td > < td > < span > 94< / span > < / td > < / tr > < tr > < td > < span > 5< / span > < / td > < td > < span > 铣床< / span > < / td > < td > < span > 93< / span > < / td > < / tr > < tr > < td > < span > 6< / span > < / td > < td > < span > 外协< / span > < / td > < td > < span > 92< / span > < / td > < / tr > < / tbody > < / table > < / figure > < h4 id = '273-每日合格率统计' > < span > 2.7.3 每日合格率统计 < / span > < img src = "snap/2-7-3-1.jpg" referrerpolicy = "no-referrer" > < / h4 > < p > < span > 表名: t_7_3_qual_rate_daily< / span > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 字段名< / span > < / th > < th style = 'text-align:left;' > < span > 中文名< / span > < / th > < th style = 'text-align:left;' > < span > 类型< / span > < / th > < th style = 'text-align:left;' > < span > 长度< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > internal_id< / span > < / td > < td style = 'text-align:left;' > < span > 序号< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 11< / span > < / td > < td style = 'text-align:left;' > < span > 主键自增< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > group_name< / span > < / td > < td style = 'text-align:left;' > < span > 分组名称< / span > < / td > < td style = 'text-align:left;' > < span > VARCHAR< / span > < / td > < td style = 'text-align:left;' > < span > 255< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > day_1< / span > < / td > < td style = 'text-align:left;' > < span > 第1天< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 3< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > day_*< / span > < / td > < td style = 'text-align:left;' > < span > 第*天< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 3< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > day_31< / span > < / td > < td style = 'text-align:left;' > < span > 第31天< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 3< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < / tbody > < / table > < / figure > < p > < span > 默认数据:< / span >
< span > 1, ' all' , 90, 90, 97, 91, 92, 88, 89, 90, 78, 87, 86, 90, 80, 97, 87, 87, 88, 89, 90, 90, 89, 86, 90, 80, 97, 87, 87, 89, 89, 89, 90< / span > < / p > < h3 id = '28-物料管理模块' > < span > 2.8 物料管理模块 < / span > < img src = "snap/2-8-1.jpg" referrerpolicy = "no-referrer" > < / h3 > < p > < span > 子模块表名对应表:< / span > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 子模块标题< / span > < / th > < th style = 'text-align:left;' > < span > 子模块表名< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > 库存占比< / span > < / td > < td style = 'text-align:left;' > < span > t_8_1_key_invt< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > 主要零件库存< / span > < / td > < td style = 'text-align:left;' > < span > t_8_2_invt_table< / span > < / td > < / tr > < / tbody > < / table > < / figure > < h4 id = '281-库存占比' > < span > 2.8.1 库存占比 < / span > < img src = "snap/2-8-1-1.jpg" referrerpolicy = "no-referrer" > < / h4 > < p > < span > 表名: t_8_1_key_invt< / span > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 字段名< / span > < / th > < th style = 'text-align:left;' > < span > 中文名< / span > < / th > < th style = 'text-align:left;' > < span > 类型< / span > < / th > < th style = 'text-align:left;' > < span > 长度< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > internal_id< / span > < / td > < td style = 'text-align:left;' > < span > 序号< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 11< / span > < / td > < td style = 'text-align:left;' > < span > 主键自增< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > name< / span > < / td > < td style = 'text-align:left;' > < span > 名称< / span > < / td > < td style = 'text-align:left;' > < span > VARCHAR< / span > < / td > < td style = 'text-align:left;' > < span > 255< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > upper_bound< / span > < / td > < td style = 'text-align:left;' > < span > 上限< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 11< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > current< / span > < / td > < td style = 'text-align:left;' > < span > 库存< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 11< / span > < / td > < td style = 'text-align:left;' > < / td > < / tr > < / tbody > < / table > < / figure > < p > < span > 默认数据:< / span > < / p > < figure > < table > < thead > < tr > < th > < span > internal_id< / span > < / th > < th > < span > name< / span > < / th > < th > < span > upper_bound< / span > < / th > < th > < span > current< / span > < / th > < / tr > < / thead > < tbody > < tr > < td > < span > 1< / span > < / td > < td > < span > 刀具A1< / span > < / td > < td > < span > 200< / span > < / td > < td > < span > 110< / span > < / td > < / tr > < tr > < td > < span > 2< / span > < / td > < td > < span > 顶针B< / span > < / td > < td > < span > 100< / span > < / td > < td > < span > 70< / span > < / td > < / tr > < tr > < td > < span > 3< / span > < / td > < td > < span > 线割丝C< / span > < / td > < td > < span > 100< / span > < / td > < td > < span > 300< / span > < / td > < / tr > < tr > < td > < span > 4< / span > < / td > < td > < span > 树脂D< / span > < / td > < td > < span > 100< / span > < / td > < td > < span > 10< / span > < / td > < / tr > < / tbody > < / table > < / figure > < h4 id = '282-主要零件库存' > < span > 2.8.2 主要零件库存 < / span > < img src = "snap/2-8-2-1.jpg" referrerpolicy = "no-referrer" > < / h4 > < p > < span > 表名: t_8_2_invt_table< / span > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 字段名< / span > < / th > < th style = 'text-align:left;' > < span > 中文名< / span > < / th > < th style = 'text-align:left;' > < span > 类型< / span > < / th > < th style = 'text-align:left;' > < span > 长度< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > internal_id< / span > < / td > < td style = 'text-align:left;' > < span > 序号< / span > < / td > < td style = 'text-align:left;' > < span > INTEGER< / span > < / td > < td style = 'text-align:left;' > < span > 11< / span > < / td > < td style = 'text-align:left;' > < span > 主键自增< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > invt_no< / span > < / td > < td style = 'text-align:left;' > < span > 编号< / span > < / td > < td style = 'text-align:left;' > < span > VARCHAR< / span > < / td > < td style = 'text-align:left;' > < span > 255< / span > < / td > < td style = 'text-align:lef
< span > < / span > < img src = "snap/4-1-1.jpg" referrerpolicy = "no-referrer" >
< span > 整个大屏系统就是由一个个子模块组成,每个子模块都用到了一些自定义控件,再打通数据库采集和网络请求采集等,将采集到的数据设置到对应的模块界面上。< / span > < / p > < h3 id = '42-主模块说明' > < span > 4.2 主模块说明< / span > < / h3 > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 主模块< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > 3rd< / span > < / td > < td style = 'text-align:left;' > < span > 一些第三方开源的类库, 比如图表qcustomplot。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > class< / span > < / td > < td style = 'text-align:left;' > < span > 存放系统初始化、样式控制、自定义控件等。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > core< / span > < / td > < td style = 'text-align:left;' > < span > 本人一直持续更新完善的通用的类库, 比如ffmpeg视频监控。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > ui< / span > < / td > < td style = 'text-align:left;' > < span > 所有的界面都分门别类放在这里。< / span > < / td > < / tr > < / tbody > < / table > < / figure > < h3 id = '43-子模块说明' > < span > 4.3 子模块说明< / span > < / h3 > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 主模块< / span > < / th > < th style = 'text-align:left;' > < span > 子模块< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > 3rd< / span > < / td > < td style = 'text-align:left;' > < span > 3rd_qcustomplot< / span > < / td > < td style = 'text-align:left;' > < span > 大名鼎鼎的第三方开源的图表组件。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > class< / span > < / td > < td style = 'text-align:left;' > < span > api< / span > < / td > < td style = 'text-align:left;' > < span > 存放数据库表映射成对应的全局队列数据、通用的辅助函数类。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > class< / span > < / td > < td style = 'text-align:left;' > < span > app< / span > < / td > < td style = 'text-align:left;' > < span > 全局配置参数管理类、秘钥管理类、通用函数。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > class< / span > < / td > < td style = 'text-align:left;' > < span > usercontrol< / span > < / td > < td style = 'text-align:left;' > < span > 当前系统的自定义控件全部放在这里,其中包括自定义饼图控件、进度仪表盘、百分比仪表盘、环形进度条、三态进度条等控件。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > core< / span > < / td > < td style = 'text-align:left;' > < span > core_control< / span > < / td > < td style = 'text-align:left;' > < span > 通用自定义控件,很多系统经常用到的控件全部放在这里。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > core< / span > < / td > < td style = 'text-align:left;' > < span > core_customplot< / span > < / td > < td style = 'text-align:left;' > < span > 继承自qcustomplot类的自定义图表组件, 专为大屏系统定制的各种图表组件。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > core< / span > < / td > < td style = 'text-align:left;' > < span > core_db< / span > < / td > < td style = 'text-align:left;' > < span > 数据库集成应用组件,比如数据库管理线程类、数据库清理线程类、数据库采集类、网络请求采集类等< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > core< / span > < / td > < td style = 'text-align:left;' > < span > core_ffmpeg< / span > < / td > < td style = 'text-align:left;' > < span > 视频监控内核, 采用ffmpeg解码, 支持各种视频流和本地视频文件, 支持声音播放和音视频同步。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > core< / span > < / td > < td style = 'text-align:left;' > < span > core_map< / span > < / td > < td style = 'text-align:left;' > < span > 地图内核, 包括了百度echart封装类, 区域轮廓数据转换js函数封装类, 百度地图封装类等。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > core< / span > < / td > < td style = 'text-align:left;' > < span > core_opengl< / span > < / td > < td style = 'text-align:left;' > < span > 视频绘制类, 采用opengl绘制, 走GPU绘制。< / span > < / td > < / tr > < tr > < td style
< span > 将对应的用户表映射到变量队列存储,以便用户登录和整体判断权限等。< / span > < / p > < h4 id = '442-通用辅助函数类' > < span > 4.4.2 通用辅助函数类< / span > < / h4 > < p > < span > 这个类就像万能胶一样, 在本人写的所有的项目中都有, 本类就是将平时常用的一些通用函数都丢在这里, 不断完善和持续改进, 包括了16进制数据转换、图形字体设置、自定义消息框、错误框、提示框等, 集成设置窗体居中显示、设置翻译文件、设置编码、设置延时、设置系统时间等静态方法。< / span >
< span > < / span > < img src = "snap/4-4-2-1.jpg" referrerpolicy = "no-referrer" > < span > < / span > < img src = "snap/4-4-2-2.jpg" referrerpolicy = "no-referrer" > < / p > < h4 id = '443-初始化及辅助' > < span > 4.4.3 初始化及辅助< / span > < / h4 > < p > < span > < / span > < img src = "snap/4-4-3-1.jpg" referrerpolicy = "no-referrer" > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 名称< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > appconfig< / span > < / td > < td style = 'text-align:left;' > < span > 配置参数类, 整个系统的配置参数存放在ini文件中, 跨平台, 所有参数都对应一个变量, 读取配置参数的时候将值赋值给变量, 写入的时候将变量值写入到配置文件。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > appfun< / span > < / td > < td style = 'text-align:left;' > < span > 辅助函数类,比如重启,获取随机数、从多个数组中取出最大值等。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > appinit< / span > < / td > < td style = 'text-align:left;' > < span > 程序初始化类, 在main函数中, 会先执行这个初始化的类, 比如初始化皮肤、字体、数据库、样式等操作, 这些都是要优先在窗体加载前执行的, 执行完毕以后再打开窗体主界面。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > appkey< / span > < / td > < td style = 'text-align:left;' > < span > 通用秘钥管理类。< / span > < / td > < / tr > < / tbody > < / table > < / figure > < h4 id = '444-自定义控件' > < span > 4.4.4 自定义控件< / span > < / h4 > < p > < span > < / span > < img src = "snap/4-4-4-1.jpg" referrerpolicy = "no-referrer" > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 名称< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > customchart< / span > < / td > < td style = 'text-align:left;' > < span > 自定义图表控件< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > custompie< / span > < / td > < td style = 'text-align:left;' > < span > 自定义饼状图, 纯painter绘制, 弥补qchart组件不支持qt4等版本。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > customtitlebar< / span > < / td > < td style = 'text-align:left;' > < span > 自定义模块标题栏< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > gaugepercent< / span > < / td > < td style = 'text-align:left;' > < span > 百分比仪表盘< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > gaugespeed< / span > < / td > < td style = 'text-align:left;' > < span > 速度仪表盘< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > progressring< / span > < / td > < td style = 'text-align:left;' > < span > 环形进度条< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > progressthree< / span > < / td > < td style = 'text-align:left;' > < span > 三态进度条< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > switchbutton< / span > < / td > < td style = 'text-align:left;' > < span > 开关按钮< / span > < / td > < / tr > < / tbody > < / table > < / figure > < p > < span > < / span > < img src = "snap/4-4-4-2.jpg" referrerpolicy = "no-referrer" > < span > < / span > < img src = "snap/4-4-4-3.jpg" referrerpolicy = "no-referrer" > < span > < / span > < img src = "snap/4-4-4-4.jpg" referrerpolicy = "no-referrer" >
2021-07-10 09:34:53 +00:00
< span > < / span > < img src = "snap/4-4-4-5.jpg" referrerpolicy = "no-referrer" > < span > < / span > < img src = "snap/4-4-4-6.jpg" referrerpolicy = "no-referrer" > < span > < / span > < img src = "snap/4-4-4-7.jpg" referrerpolicy = "no-referrer" >
2021-09-26 01:50:09 +00:00
< span > < / span > < img src = "snap/4-4-4-8.jpg" referrerpolicy = "no-referrer" > < span > < / span > < img src = "snap/4-4-4-9.jpg" referrerpolicy = "no-referrer" > < / p > < h3 id = '45-内核模块' > < span > 4.5 内核模块< / span > < / h3 > < h4 id = '451-通用自定义控件' > < span > 4.5.1 通用自定义控件< / span > < / h4 > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 名称< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > bottomwidget< / span > < / td > < td style = 'text-align:left;' > < span > 通用底部状态栏控件,可以设置软件名称、版本号、运行时间等。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > colorcombobox< / span > < / td > < td style = 'text-align:left;' > < span > 颜色下拉框控件,在系统设置中有。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > cpumemorylabel< / span > < / td > < td style = 'text-align:left;' > < span > CPU和内存使用情况标签控件, 主界面右上角显示。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > customtitlebar< / span > < / td > < td style = 'text-align:left;' > < span > 停靠窗体自定义标题栏控件。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > devicebutton< / span > < / td > < td style = 'text-align:left;' > < span > 设备按钮控件,比如图片地图模块中用到,可设置不同的图标样式和状态等,双击发出信号进行相应处理比如弹出对应视频预览等。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > framelesswidget< / span > < / td > < td style = 'text-align:left;' > < span > 无边框窗体管理类,无边框拖动+拉伸,主界面就用到了这个类。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > lcddatetime< / span > < / td > < td style = 'text-align:left;' > < span > 软件右上角显示时间的控件。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > panelwidget< / span > < / td > < td style = 'text-align:left;' > < span > 面板容器控件, 主界面子模块表格消息, 就用到此控件, 用于将一堆widget放到此容器进行管理, 自动形成滚动条等。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > switchbutton< / span > < / td > < td style = 'text-align:left;' > < span > 开关按钮控件,在系统设置中存在大量该控件。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > xslider< / span > < / td > < td style = 'text-align:left;' > < span > 滑动条控件,在原有滑动条基础上增加了鼠标按下立即定位等。< / span > < / td > < / tr > < / tbody > < / table > < / figure > < h4 id = '452-图表组件内核' > < span > 4.5.2 图表组件内核< / span > < / h4 > < p > < span > < / span > < img src = "snap/4-5-2-1.jpg" referrerpolicy = "no-referrer" > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 名称< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > customplot< / span > < / td > < td style = 'text-align:left;' > < span > 自定义图表组件类。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > customplotbarh< / span > < / td > < td style = 'text-align:left;' > < span > 自定义形状-横向柱状图。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > customplotbarv< / span > < / td > < td style = 'text-align:left;' > < span > 自定义形状-垂直柱状图。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > customplothead< / span > < / td > < td style = 'text-align:left;' > < span > 当前组件通用头文件。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > customplothelper< / span > < / td > < td style = 'text-align:left;' > < span > 当前组件通用辅助函数文件。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > customplotline< / span > < / td > < td style = 'text-align:left;' > < span > 自定义形状-平滑曲线图。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > customplottracer< / span > < / td > < td style = 'text-align:left;' > < span > 自定义图层绘制十字线,也叫游标,定位线。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > smoothcurve< / span > < / td > < td style = 'text-align:left;' > < span > 平滑曲线算法类,内置多种平滑算法,可以自行增加其他算法。< / span > < / td > < / tr > < / tbody > < / table > < /figur
< span > 本系统只用到了该类库中的dbconnthread、dbhttpthread。< / span >
2021-07-10 09:34:53 +00:00
< span > dbconnthread: 封装的一个通用的数据库通信类, 支持sqlite、mysql、PostgreSQL等数据库, 功能包括了数据库的打开和关闭, 线程执行sql语句队列信号发出执行结果等, 支持重连。< / span >
2021-09-26 01:50:09 +00:00
< span > dbhttpthread: 本系统除了支持数据库采集模式以外, 还支持发送http网络请求的方式来采集数据, 请求中带对应要查询的表, 字段等信息, 这个类就是专门的请求类, 请求结果自动过滤运算并信号发出去, 返回数据的信号和数据库采集的信号完全一致, 使得主界面关联到同一个槽函数就能正常工作。< / span > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 名称< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > dbcleanthread< / span > < / td > < td style = 'text-align:left;' > < span > 自动清理数据线程类。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > dbconnthread< / span > < / td > < td style = 'text-align:left;' > < span > 数据库通信管理线程类。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > dbdelegate< / span > < / td > < td style = 'text-align:left;' > < span > 自定义委托全家桶,包括复选框、下拉框、密码框、按钮等。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > dbhead< / span > < / td > < td style = 'text-align:left;' > < span > 当前组件通用头文件。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > dbhelper< / span > < / td > < td style = 'text-align:left;' > < span > 各种数据库应用函数封装, 比如初始化数据库、执行sql语句等。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > dbhttpthread< / span > < / td > < td style = 'text-align:left;' > < span > 网络请求数据采集类。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > dbpage< / span > < / td > < td style = 'text-align:left;' > < span > 数据库通用翻页类。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > dbpagemodel< / span > < / td > < td style = 'text-align:left;' > < span > 数据库翻页类数据模型。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > navpage< / span > < / td > < td style = 'text-align:left;' > < span > 分页导航控件。< / span > < / td > < / tr > < / tbody > < / table > < / figure > < h4 id = '454-视频监控内核' > < span > 4.5.4 视频监控内核< / span > < / h4 > < p > < span > < / span > < img src = "snap/4-5-4-1.jpg" referrerpolicy = "no-referrer" > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 名称< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > ffmpegconvert< / span > < / td > < td style = 'text-align:left;' > < span > ffmpeg各种转换处理函数封装。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > ffmpeghead< / span > < / td > < td style = 'text-align:left;' > < span > ffmpeg引入头文件。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > ffmpeghelper< / span > < / td > < td style = 'text-align:left;' > < span > ffmpeg辅助类, 包括版本号, 校验url地址、获取流索引等。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > ffmpegsync< / span > < / td > < td style = 'text-align:left;' > < span > ffmpeg音视频同步类, 包括了同步以及发出当前播放进度信号。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > ffmpegthread< / span > < / td > < td style = 'text-align:left;' > < span > ffmpeg核心解码类, 包括音视频的解码。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > ffmpegtool< / span > < / td > < td style = 'text-align:left;' > < span > ffmpeg工具类, 用于执行ffmpeg的命令获取结果。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > ffmpegwidget< / span > < / td > < td style = 'text-align:left;' > < span > ffmpeg视频显示窗体类, 依赖ffmpegthread。< / span > < / td > < / tr > < tr > < td style = 'text-align:left;' > < span > videoffmpeg< / span > < / td > < td style = 'text-align:left;' > < span > ffmpeg多通道管理类。< / span > < / td > < / tr > < / tbody > < / table > < / figure > < h4 id = '455-大屏地图内核' > < span > 4.5.5 大屏地图内核< / span > < / h4 > < p > < span > < / span > < img src = "snap/4-5-5-1.jpg" referrerpolicy = "no-referrer" > < / p > < figure > < table > < thead > < tr > < th style = 'text-align:left;' > < span > 名称< / span > < / th > < th style = 'text-align:left;' > < span > 说明< / span > < / th > < / tr > < / thead > < tbody > < tr > < td style = 'text-align:left;' > < span > echartjs< / span > < / td > < td style = 'text-align:left;' > < span > echart模块中用到的json文件转j
< span > < / span > < img src = "snap/5-5-6-1.jpg" referrerpolicy = "no-referrer" > < / p > < h4 id = '557-数据库-远程访问' > < span > 5.5.7 数据库-远程访问 < / span > < img src = "snap/5-5-7-1.jpg" referrerpolicy = "no-referrer" > < / h4 > < h4 id = '558-数据库-odbc' > < span > 5.5.8 数据库-odbc< / span > < / h4 > < p > < span > ODBC连接字符串格式如下图: < / span >
< span > < / span > < img src = "snap/5-5-8-1.jpg" referrerpolicy = "no-referrer" > < / p > < h3 id = '56-各系统运行图' > < span > 5.6 各系统运行图< / span > < / h3 > < h4 id = '561-windows-mingw' > < span > 5.6.1 windows-mingw < / span > < img src = "snap/5-6-1-1.jpg" referrerpolicy = "no-referrer" > < / h4 > < h4 id = '562-windows-msvc' > < span > 5.6.2 windows-msvc < / span > < img src = "snap/5-6-2-1.jpg" referrerpolicy = "no-referrer" > < span > < / span > < img src = "snap/5-6-2-2.jpg" referrerpolicy = "no-referrer" > < / h4 > < h4 id = '563-linux-ubuntu' > < span > 5.6.3 linux-ubuntu < / span > < img src = "snap/5-6-3-1.jpg" referrerpolicy = "no-referrer" > < / h4 > < h4 id = '564-linux-uos' > < span > 5.6.4 linux-uos < / span > < img src = "snap/5-6-4-1.jpg" referrerpolicy = "no-referrer" > < / h4 > < h4 id = '565-linux-kylin' > < span > 5.6.5 linux-kylin < / span > < img src = "snap/5-6-5-1.jpg" referrerpolicy = "no-referrer" > < / h4 > < h4 id = '566-linux-neokylin' > < span > 5.6.6 linux-neokylin < / span > < img src = "snap/5-6-6-1.jpg" referrerpolicy = "no-referrer" > < / h4 > < h4 id = '567-linux-fedoar' > < span > 5.6.7 linux-fedoar < / span > < img src = "snap/5-6-7-1.jpg" referrerpolicy = "no-referrer" > < / h4 > < h4 id = '568-unix-mac' > < span > 5.6.8 unix-mac < / span > < img src = "snap/5-6-8-1.jpg" referrerpolicy = "no-referrer" > < / h4 > < / div > < / div >
2021-07-10 09:34:53 +00:00
< script > ( function ( ) { var e = document . body . parentElement , t = [ ] , n = null , i = document . body . classList . contains ( "typora-export-collapse-outline" ) , r = function ( e , t , n ) { document . addEventListener ( e , function ( e ) { if ( ! e . defaultPrevented ) for ( var i = e . target ; i && i != this ; i = i . parentNode ) if ( i . matches ( t ) ) { ! 1 === n . call ( i , e ) && ( e . preventDefault ( ) , e . stopPropagation ( ) ) ; break } } , ! 1 ) } ; function o ( ) { return e . scrollTop } r ( "click" , ".outline-expander" , function ( e ) { var t = this . closest ( ".outline-item-wrapper" ) . classList ; return t . contains ( "outline-item-open" ) ? t . remove ( "outline-item-open" ) : t . add ( "outline-item-open" ) , d ( ) , ! 1 } ) , r ( "click" , ".outline-item" , function ( e ) { var t = this . querySelector ( ".outline-label" ) ; if ( location . hash = "#" + t . getAttribute ( "href" ) , i ) { var n = this . closest ( ".outline-item-wrapper" ) . classList ; n . contains ( "outline-item-open" ) || n . add ( "outline-item-open" ) , c ( ) , n . add ( "outline-item-active" ) } } ) ; var a , s , l = function ( ) { var e = o ( ) ; n = null ; for ( var i = 0 ; i < t . length && t [ i ] [ 1 ] - e < 60 ; i ++ ) n = t [ i ] } , c = function ( ) { document . querySelectorAll ( ".outline-item-active" ) . forEach ( e => e . classList . remove ( "outline-item-active" ) ) , document . querySelectorAll ( ".outline-item-single.outline-item-open" ) . forEach ( e => e . classList . remove ( "outline-item-open" ) ) } , d = function ( ) { if ( n ) { c ( ) ; var e = document . querySelector ( '.outline-label[href="#' + ( CSS . escape ? CSS . escape ( n [ 0 ] ) : n [ 0 ] ) + '"]' ) ; if ( e ) if ( i ) { var t = e . closest ( ".outline-item-open>ul>.outline-item-wrapper" ) ; if ( t ) t . classList . add ( "outline-item-active" ) ; else { for ( var r = ( e = e . closest ( ".outline-item-wrapper" ) ) . parentElement . closest ( ".outline-item-wrapper" ) ; r ; ) r = ( e = r ) . parentElement . closest ( ".outline-item-wrapper" ) ; e . classList . add ( "outline-item-active" ) } } else e . closest ( ".outline-item-wrapper" ) . classList . add ( "outline-item-active" ) } } ; window . addEventListener ( "scroll" , function ( e ) { a && clearTimeout ( a ) , a = setTimeout ( function ( ) { l ( ) , d ( ) } , 300 ) } ) ; var u = function ( ) { s = setTimeout ( function ( ) { ! function ( ) { t = [ ] ; var e = o ( ) ; document . querySelector ( "#write" ) . querySelectorAll ( "h1, h2, h3, h4, h5, h6" ) . forEach ( n => { var i = n . getAttribute ( "id" ) ; t . push ( [ i , e + n . getBoundingClientRect ( ) . y ] ) } ) } ( ) , l ( ) , d ( ) } , 300 ) } ; window . addEventListener ( "resize" , function ( e ) { s && clearTimeout ( s ) , u ( ) } ) , u ( ) } ) ( ) ; < / script > < / body >
< / html >