diff --git a/client/janus_gateway_win/usocket_test/peer_connection.cpp b/client/janus_gateway_win/usocket_test/peer_connection.cpp
index 9dcdc83..8bf35c6 100644
--- a/client/janus_gateway_win/usocket_test/peer_connection.cpp
+++ b/client/janus_gateway_win/usocket_test/peer_connection.cpp
@@ -11,9 +11,6 @@
#include "modules/video_capture/video_capture_factory.h"
-
-
-
std::string IceGatheringStateName(webrtc::PeerConnectionInterface::IceGatheringState w) {
switch (w) {
case webrtc::PeerConnectionInterface::IceGatheringState::kIceGatheringNew:
diff --git a/client/rtmp_demo/yuvgl/depency/conanfile.txt b/client/rtmp_demo/yuvgl/depency/conanfile.txt
new file mode 100644
index 0000000..3134468
--- /dev/null
+++ b/client/rtmp_demo/yuvgl/depency/conanfile.txt
@@ -0,0 +1,4 @@
+[requires]
+ffmpeg/4.2.1
+[imports]
+.,* -> ./third/msvc32 @ folder=True, ignore_case=True, excludes=*.html *.jpeg
\ No newline at end of file
diff --git a/client/webrtc_demo/qss/css/QssMainWindow.css b/client/webrtc_demo/qss/css/QssMainWindow.css
new file mode 100644
index 0000000..3a28dc5
--- /dev/null
+++ b/client/webrtc_demo/qss/css/QssMainWindow.css
@@ -0,0 +1,8 @@
+
+QFrame#window {
+ border: 1px solid black;
+ font-style: normal;
+ background: rgb(239,242,245);
+}
+
+
diff --git a/client/webrtc_demo/qss/css/QssTitleBar.css b/client/webrtc_demo/qss/css/QssTitleBar.css
new file mode 100644
index 0000000..90be03b
--- /dev/null
+++ b/client/webrtc_demo/qss/css/QssTitleBar.css
@@ -0,0 +1,65 @@
+QWidget#qssTitleBar{
+ color: white;
+ background: rgb(51,101,177);
+ border: 0px;
+ margin: 0px;
+
+}
+QWidget#qssTitleBar > QPushButton#titlebaricon{
+ background: rgb(51,101,177);
+ width: 25px;
+ height:25px;
+}
+
+QWidget#qssTitleBar > QPushButton#titlebarclosebtn{
+ image: url(":/qss/icon/btn_close_down.svg");
+ background: rgb(51,101,177);
+ width: 25px;
+ height:25px;
+ margin-left: 1px;
+}
+QWidget#qssTitleBar >QPushButton#titlebarmaxbtn{
+ background: rgb(51,101,177);
+ width: 25px;
+ height:25px;
+ margin-left: 1px;
+ image: url(":/qss/icon/btn_max_normal.svg");
+
+}
+QWidget#qssTitleBar >QPushButton#titlebarclosebtn:enabled:hover{
+ background: red;
+}
+QWidget#qssTitleBar >QPushButton#titlebarminbtn{
+ image: url(":/qss/icon/btn_mini_down.svg");
+ background: rgb(51,101,177);
+ width: 25px;
+ height:25px;
+ margin-left: 1px;
+}
+QWidget#qssTitleBar >QPushButton#titlebarminbtn:enabled:hover{
+ background: rgb(187, 212, 238);
+}
+QWidget#qssTitleBar >QPushButton#titlebarrestorebtn{
+ image: url(":/qss/icon/btn_max_normal.svg");
+ background: rgb(187, 212, 238);
+ width: 25px;
+ height:25px;
+ margin-left: 1px;
+ margin-right: 2px;
+}
+QWidget#qssTitleBar >QPushButton#titlebarrestorebtn:enabled:hover{
+ background: rgb(187, 212, 238);
+}
+QWidget#qssTitleBar >QPushButton#btn_serial:!enabled {
+ background: rgb(180, 180, 180);
+ color: white;
+}
+QWidget#qssTitleBar >QPushButton#titlebarmaxbtn:enabled:hover{
+ background: rgb(100, 160, 220);
+}
+QWidget#qssTitleBar > QLabel#title{
+ color: white;
+ font-size: 13px;
+ font-family: monospace;
+}
+
diff --git a/client/webrtc_demo/qss/css/basic.css b/client/webrtc_demo/qss/css/basic.css
new file mode 100644
index 0000000..3299e21
--- /dev/null
+++ b/client/webrtc_demo/qss/css/basic.css
@@ -0,0 +1,149 @@
+
+QPushButton:enabled {
+ background: rgb(22,155,213);
+ color: white;
+ border-radius:3px;
+}
+
+QPushButton:!enabled {
+ background: white;
+ color: black;
+}
+
+QPushButton:enabled:hover {
+ background: rgb(100, 160, 220);
+}
+
+QPushButton:enabled:pressed {
+ background: rgb(120, 170, 220);
+}
+
+
+
+QLabel{
+
+}
+/**********下拉列表**********/
+QComboBox {
+ height: 25px;
+ border: 1px solid rgb(111, 156, 207);
+ background: white;
+ border-radius:3px;
+}
+
+QComboBox:enabled {
+ color: rgb(84, 84, 84);
+}
+
+QComboBox:!enabled {
+ color: rgb(80, 80, 80);
+}
+
+QComboBox:enabled:hover, QComboBox:enabled:focus {
+ color: rgb(51, 51, 51);
+}
+
+QComboBox::drop-down {
+ width: 20px;
+ border: none;
+ background: transparent;
+}
+
+QComboBox::drop-down:hover {
+ background: rgba(0, 0, 0, 30);
+}
+
+QComboBox::down-arrow {
+ image: url(:/qss/icon/combo_arrow.png);
+ max-height:30%;
+ max-width: 30%;
+}
+
+QComboBox::down-arrow:on {
+ top: 1px;
+}
+
+QComboBox QAbstractItemView {
+ border: 1px solid rgb(111, 156, 207);
+ background: white;
+ outline: none;
+}
+
+QComboBox QAbstractItemView::item {
+ height: 25px;
+ color: rgb(73, 73, 73);
+}
+
+QComboBox QAbstractItemView::item:selected {
+ background: rgb(232, 241, 250);
+ color: rgb(2, 65, 132);
+}
+
+
+
+QTabWidget{
+ margin-left:10;
+ background: rgb(239,242,245);
+
+}
+
+QTabWidget::pane {
+ border: none;
+
+}
+
+QTabWidget::tab-bar {
+ border: none;
+}
+
+QTabBar::tab {
+ border: none;
+ border-top-left-radius: 4px;
+ color: white;
+ background: rgb(239,242,245);
+ color: black;
+
+ height: 28px;
+ min-width: 85px;
+ margin-right: 5px;
+}
+
+QTabBar::tab:hover {
+ background: rgb(51,101,177);
+}
+
+QTabBar::tab:selected {
+ color: white;
+ background: rgb(51,101,177);
+}
+
+
+QTableView {
+ border: none;
+}
+QTableView::item {
+ padding-left: 5px;
+ padding-right: 5px;
+ background: white;
+}
+QTableView::item:selected {
+ border: 1px solid black;
+ color: rgb(65, 65, 65);
+
+}
+QTableView::item:selected:!active {
+ color: rgb(65, 65, 65);
+}
+QTableView::indicator {
+ border: 1px solid black;
+
+ width: 20px;
+ height: 20px;
+}
+
+
+QLineEdit {
+ border: 1px solid rgb(111, 156, 207);
+ background: white;
+ border-radius:3px;
+}
diff --git a/client/webrtc_demo/qss/css/corrugation_form.css b/client/webrtc_demo/qss/css/corrugation_form.css
new file mode 100644
index 0000000..b7e5d55
--- /dev/null
+++ b/client/webrtc_demo/qss/css/corrugation_form.css
@@ -0,0 +1,192 @@
+
+QPushButton:enabled {
+ background: rgb(22,155,213);
+ color: white;
+ border-radius:3px;
+}
+
+QPushButton:!enabled {
+ background: white;
+ color: black;
+}
+
+QPushButton:enabled:hover {
+ background: rgb(100, 160, 220);
+}
+
+QPushButton:enabled:pressed {
+ background: rgb(120, 170, 220);
+}
+
+
+QPushButton#pushButton:enabled {
+ background: white;
+ color: black;
+ border-radius:3px;
+}
+
+QPushButton#pushButton:!enabled {
+ background: rgb(180, 180, 180);
+ color: white;
+}
+
+QPushButton#pushButton:enabled:hover{
+ background: rgb(100, 160, 220);
+}
+
+QPushButton#pushButton:enabled:pressed{
+ background: rgb(120, 170, 220);
+}
+
+QLabel{
+ font-size: 13px;
+}
+/**********б**********/
+QComboBox {
+ height: 25px;
+ border: 1px solid rgb(111, 156, 207);
+ background: white;
+ border-radius:3px;
+}
+
+QComboBox:enabled {
+ color: rgb(84, 84, 84);
+}
+
+QComboBox:!enabled {
+ color: rgb(80, 80, 80);
+}
+
+QComboBox:enabled:hover, QComboBox:enabled:focus {
+ color: rgb(51, 51, 51);
+}
+
+QComboBox::drop-down {
+ width: 20px;
+ border: none;
+ background: transparent;
+}
+
+QComboBox::drop-down:hover {
+ background: rgba(0, 0, 0, 30);
+}
+
+QComboBox::down-arrow {
+ image: url(:/qss/icon/combo_arrow.png);
+ max-height:30%;
+ max-width: 30%;
+}
+
+QComboBox::down-arrow:on {
+ top: 1px;
+}
+
+QComboBox QAbstractItemView {
+ border: 1px solid rgb(111, 156, 207);
+ background: white;
+ outline: none;
+}
+
+QComboBox QAbstractItemView::item {
+ height: 25px;
+ color: rgb(73, 73, 73);
+}
+
+QComboBox QAbstractItemView::item:selected {
+ background: rgb(232, 241, 250);
+ color: rgb(2, 65, 132);
+}
+
+
+
+QTabWidget{
+ margin-left:10;
+ background: rgb(239,242,245);
+
+}
+
+QTabWidget::pane {
+ border: none;
+
+}
+
+QTabWidget::tab-bar {
+ border: none;
+}
+
+QTabBar::tab {
+ border: none;
+ border-top-left-radius: 4px;
+ color: white;
+ background: rgb(239,242,245);
+ color: black;
+
+ height: 28px;
+ min-width: 85px;
+ margin-right: 5px;
+}
+
+QTabBar::tab:hover {
+ background: rgb(51,101,177);
+}
+
+QTabBar::tab:selected {
+ color: white;
+ background: rgb(51,101,177);
+}
+
+
+QTableView {
+ border: 1px solid grey;
+}
+QTableView::item {
+ padding-left: 5px;
+ padding-right: 5px;
+ background: white;
+}
+QTableView::item:selected {
+ border: 1px solid black;
+ background: rgba(255, 255, 255, 30);
+ color: black;
+}
+QTableView::item:selected:!active {
+ color: rgb(65, 65, 65);
+}
+QTableView::indicator {
+ border: 1px solid black;
+
+ width: 20px;
+ height: 20px;
+}
+
+
+QTableView::indicator:enabled:unchecked {
+
+ image: url(:/White/checkBox);
+}
+QTableView::indicator:enabled:unchecked:hover {
+ image: url(:/White/checkBoxHover);
+}
+QTableView::indicator:enabled:unchecked:pressed {
+ image: url(:/White/checkBoxPressed);
+}
+QTableView::indicator:enabled:checked {
+ image: url(:/White/checkBoxChecked);
+}
+QTableView::indicator:enabled:checked:hover {
+ image: url(:/White/checkBoxCheckedHover);
+}
+QTableView::indicator:enabled:checked:pressed {
+ image: url(:/White/checkBoxCheckedPressed);
+}
+QTableView::indicator:enabled:indeterminate {
+ image: url(:/White/checkBoxIndeterminate);
+}
+QTableView::indicator:enabled:indeterminate:hover {
+ image: url(:/White/checkBoxIndeterminateHover);
+}
+QTableView::indicator:enabled:indeterminate:pressed {
+ image: url(:/White/checkBoxIndeterminatePressed);
+}
+
+
diff --git a/client/webrtc_demo/qss/css/dark.css b/client/webrtc_demo/qss/css/dark.css
new file mode 100644
index 0000000..c7021da
--- /dev/null
+++ b/client/webrtc_demo/qss/css/dark.css
@@ -0,0 +1,866 @@
+/*
+Colour scheme used:
+- White (text): #eff0f1
+- Dark black (main bg): #272a2d
+- Lighter dark black (menu bar): #373b3f
+- Dark blue: #18465d
+- Gray: #76797C
+- Red (accents): #db1c49
+
+Useful reference on QSS:
+ - http://doc.qt.io/qt-5/stylesheet-reference.html#alternate-background-color-prop
+
+Be sure to change all image urls to the appropriate folder on your system.
+*/
+
+
+QPushButton#btn_serial:enabled {
+ border-image: url(:/qss/icon/btn_serial.png);
+ background: rgb(120, 170, 220);
+ color: white;
+ margin-left: 10;
+ margin-top:5;
+}
+QPushButton#btn_serial:!enabled {
+ background: rgb(180, 180, 180);
+ color: white;
+}
+
+QPushButton#btn_serial:enabled:hover{
+ background: rgb(100, 160, 220);
+}
+QPushButton#btn_serial:enabled:pressed{
+ background: rgb(0, 78, 161);
+}
+
+
+QPushButton#btn_process:enabled {
+ background: rgb(120, 170, 220);
+ color: white;
+ margin-left: 5;
+ margin-top:5;
+}
+QPushButton#btn_process:!enabled {
+ background: rgb(180, 180, 180);
+ color: white;
+}
+QPushButton#btn_process:enabled:hover{
+ background: rgb(100, 160, 220);
+}
+QPushButton#btn_process:enabled:pressed{
+ background: rgb(0, 78, 161);
+}
+
+/*================================================================
+QWidget
+================================================================*/
+QWidget {
+ color: #eff0f1;
+ background-color: #272a2d;
+ selection-background-color: #db1c49;
+ selection-color: #eff0f1;
+}
+
+QWidget::item:hover {
+ background-color: #18465d;
+ color: #eff0f1;
+}
+
+QWidget::item:selected {
+ background-color: #18465d;
+}
+
+/*================================================================
+QCheckBox/QGroupBox
+================================================================*/
+QCheckBox {
+ spacing: 5px;
+ outline: none;
+ color: #eff0f1;
+ margin-bottom: 2px;
+}
+
+QCheckBox:disabled {
+ color: #76797C;
+}
+
+QCheckBox::indicator,
+QGroupBox::indicator {
+ width: 18px;
+ height: 18px;
+}
+
+QGroupBox::indicator {
+ margin-left: 2px;
+}
+
+QCheckBox::indicator:unchecked {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/checkbox_unchecked.png);
+}
+
+QCheckBox::indicator:unchecked:hover,
+QCheckBox::indicator:unchecked:focus,
+QCheckBox::indicator:unchecked:pressed,
+QGroupBox::indicator:unchecked:hover,
+QGroupBox::indicator:unchecked:focus,
+QGroupBox::indicator:unchecked:pressed {
+ border: none;
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/checkbox_unchecked_focus.png);
+}
+
+QCheckBox::indicator:checked {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/checkbox_checked.png);
+}
+
+QCheckBox::indicator:checked:hover,
+QCheckBox::indicator:checked:focus,
+QCheckBox::indicator:checked:pressed,
+QGroupBox::indicator:checked:hover,
+QGroupBox::indicator:checked:focus,
+QGroupBox::indicator:checked:pressed {
+ border: none;
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/checkbox_checked_focus.png);
+}
+
+QCheckBox::indicator:indeterminate {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/checkbox_indeterminate.png);
+}
+
+QCheckBox::indicator:indeterminate:focus,
+QCheckBox::indicator:indeterminate:hover,
+QCheckBox::indicator:indeterminate:pressed {
+ image: url(C:/Users/franc/AppData/Roaming/TeXstudio/rc/checkbox_indeterminate_focus.png);
+}
+
+QCheckBox::indicator:checked:disabled,
+QGroupBox::indicator:checked:disabled {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/checkbox_checked_disabled.png);
+}
+
+QCheckBox::indicator:unchecked:disabled,
+QGroupBox::indicator:unchecked:disabled {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/checkbox_unchecked_disabled.png);
+}
+
+/*================================================================
+QMenuBar - e.g. Main toolbar (file/edit/idefix etc.)
+================================================================*/
+QMenuBar {
+ color: #eff0f1;
+ background-color: #373b3f;
+}
+
+QMenuBar::item {
+ background: transparent;
+}
+
+/*================================================================
+QMenu
+================================================================*/
+QMenu {
+ border: 1px solid #76797C;
+ color: #eff0f1;
+ margin: 2px;
+}
+
+QMenu::separator {
+ height: 2px;
+ background: #76797C;
+ margin-left: 5px;
+ margin-right: 5px;
+}
+
+/*================================================================
+QToolbar
+================================================================*/
+QToolBar {
+ border: 1px solid #393838;
+ background: 1px solid #272a2d;
+ font-weight: bold;
+}
+
+QToolBar::handle:horizontal {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/Hmovetoolbar.png);
+}
+
+QToolBar::handle:vertical {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/Vmovetoolbar.png);
+}
+
+QToolBar::separator:horizontal {
+ width: 2px;
+ margin: 3px 10px;
+ background-color: #76797C;
+}
+
+QToolBar::separator:vertical {
+ height: 2px;
+ margin: 10px 3px;
+ background-color: #76797C;
+}
+
+/*================================================================
+QScrollBar - e.g. Scrollbar in internal PDFviewer, editor window etc.
+================================================================*/
+QScrollBar:horizontal {
+ height: 25px;
+ margin: 3px 27px 3px 27px;
+ border: 1px transparent #2A2929;
+ border-radius: 4px;
+ background-color: #000000;
+}
+
+QScrollBar::handle:horizontal {
+ background-color: #76797C;
+ min-width: 15px;
+ border-radius: 4px;
+}
+
+QScrollBar::add-line:horizontal {
+ margin: 0px 3px 0px 3px;
+ border-image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/right_arrow_disabled.png);
+ width: 20px;
+ height: 20px;
+ subcontrol-position: right;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::sub-line:horizontal {
+ margin: 0px 3px 0px 3px;
+ border-image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/left_arrow_disabled.png);
+ height: 20px;
+ width: 20px;
+ subcontrol-position: left;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::add-line:horizontal:hover,
+QScrollBar::add-line:horizontal:on {
+ border-image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/right_arrow.png);
+ height: 20px;
+ width: 20px;
+ subcontrol-position: right;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::sub-line:horizontal:hover,
+QScrollBar::sub-line:horizontal:on {
+ border-image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/left_arrow.png);
+ height: 20px;
+ width: 20px;
+ subcontrol-position: left;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::up-arrow:horizontal,
+QScrollBar::down-arrow:horizontal {
+ background: none;
+}
+
+QScrollBar::add-page:horizontal,
+QScrollBar::sub-page:horizontal {
+ background: none;
+}
+
+QScrollBar:vertical {
+ background-color: #000000;
+ width: 25px;
+ margin: 27px 3px 27px 3px;
+ border: 1px solid #2A2929;
+ border-radius: 4px;
+}
+
+QScrollBar::handle:vertical {
+ background-color: #76797C;
+ min-height: 15px;
+ border-radius: 4px;
+}
+
+QScrollBar::sub-line:vertical {
+ margin: 3px 0px 3px 0px;
+ border-image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/up_arrow_disabled.png);
+ height: 20px;
+ width: 20px;
+ subcontrol-position: top;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::add-line:vertical {
+ margin: 3px 0px 3px 0px;
+ border-image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/down_arrow_disabled.png);
+ height: 20px;
+ width: 20px;
+ subcontrol-position: bottom;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::sub-line:vertical:hover,
+QScrollBar::sub-line:vertical:on {
+ border-image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/up_arrow.png);
+ height: 20px;
+ width: 20px;
+ subcontrol-position: top;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::add-line:vertical:hover,
+QScrollBar::add-line:vertical:on {
+ border-image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/down_arrow.png);
+ height: 20px;
+ width: 20px;
+ subcontrol-position: bottom;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::up-arrow:vertical,
+QScrollBar::down-arrow:vertical {
+ background: none;
+}
+
+QScrollBar::add-page:vertical,
+QScrollBar::sub-page:vertical {
+ background: none;
+}
+
+/*================================================================
+QTabBar - e.g. File tabs (top), Bottom panel tabs (top), Autocompleter window tabs (bottom)
+================================================================*/
+QTabBar {
+ qproperty-drawBase: 0; /* important */
+ background-color: transparent;
+}
+
+/* Workaround for QTabBars created from docked QDockWidgets which don't draw the border if not set and reseted as follows: */
+QTabBar {
+ border-top: 1px transparent #76797C; /* set color for all QTabBars */
+}
+QDialog QTabBar {
+ border-color: transparent; /* set color for QTabBars inside Preferences dialog */
+}
+/* */
+
+QTabBar::close-button {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/close.png);
+ background: transparent;
+ margin-top: 6px;
+ margin-bottom: 6px;
+}
+
+QTabBar::close-button:hover {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/close-hover.png);
+ background: transparent;
+ margin-top: 6px;
+ margin-bottom: 6px;
+}
+
+QTabBar::close-button:pressed {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/close-pressed.png);
+ background: transparent;
+ margin-top: 6px;
+ margin-bottom: 6px;
+}
+
+/* TOP TABS */
+
+QTabBar::tab:top {
+ color: #eff0f1;
+ border: 1px solid #76797C;
+ border-bottom: 1px transparent black;
+ background-color: #31363b;
+ padding: 5px;
+ min-width: 50px;
+ border-top-left-radius: 6px;
+ border-top-right-radius: 6px;
+}
+
+QTabBar::tab:top:selected {
+ color: #eff0f1;
+ background-color: #54575B;
+ border: 2px solid #76797C;
+ border-bottom: 3px solid #3daee9;
+ border-top-left-radius: 6px;
+ border-top-right-radius: 6px;
+}
+
+QTabBar::tab:top:!selected:hover {
+ background-color: #18465d;
+}
+
+/* BOTTOM TABS */
+
+QTabBar::tab:bottom {
+ color: #eff0f1;
+ border: 1px solid #76797C;
+ border-top: 1px transparent black;
+ background-color: #31363b;
+ padding: 5px;
+ border-bottom-left-radius: 6px;
+ border-bottom-right-radius: 6px;
+ min-width: 50px;
+}
+
+QTabBar::tab:bottom:selected {
+ color: #eff0f1;
+ background-color: #54575B;
+ border: 2px solid #76797C;
+ border-top: 3px solid #3daee9;
+ border-bottom-left-radius: 6px;
+ border-bottom-right-radius: 6px;
+}
+
+QTabBar::tab:bottom:!selected:hover {
+ background-color: #18465d;
+}
+
+/*================================================================
+QDockWidget - e.g. "Search" header in internal PDF viewer
+================================================================*/
+QDockWidget {
+ titlebar-close-icon: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/transparent.png);
+ titlebar-normal-icon: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/transparent.png);
+}
+
+QDockWidget::title {
+ background: #373b3f;
+ color: transparent;
+ border: 1px transparent;
+ text-align: left;
+}
+
+QDockWidget::close-button,
+QDockWidget::float-button {
+ border: transparent;
+ padding: 0px;
+ icon-size: 25px;
+ background: transparent;
+}
+
+QDockWidget::float-button {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/undock.png);
+ subcontrol-position: right center;
+ left: -50px;
+}
+
+QDockWidget::close-button {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/close.png);
+ subcontrol-position: right center;
+ left: -10px;
+}
+
+QDockWidget::float-button:hover {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/undock-pressed.png);
+ subcontrol-position: right center;
+ left: -50px;
+}
+
+QDockWidget::close-button:hover {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/close-pressed.png);
+ subcontrol-position: right center;
+ left: -10px;
+}
+
+QDockWidget::close-button:pressed {
+ padding: 2px -2px -2px 2px;
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/close-pressed.png);
+}
+
+QDockWidget::float-button:pressed {
+ padding: 2px -2px -2px 2px;
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/undock-pressed.png);
+}
+
+QDockWidget QListView {
+ outline: 0;
+ background: #272a2d;
+ alternate-background-color: #373b3f;
+ color: #eff0f1;
+}
+
+/*================================================================
+QTreeView, QListView
+================================================================*/
+QTreeView,
+QListView {
+ border: 1px solid #76797C;
+ background-color: #232629;
+}
+
+QTreeView:branch:selected,
+QTreeView:branch:hover {
+ background: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/transparent.png);
+}
+
+QTreeView::branch:has-siblings:!adjoins-item {
+ border-image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/transparent.png);
+}
+
+QTreeView::branch:has-siblings:adjoins-item {
+ border-image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/transparent.png);
+}
+
+QTreeView::branch:!has-children:!has-siblings:adjoins-item {
+ border-image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/transparent.png);
+}
+
+QTreeView::branch:has-children:!has-siblings:closed,
+QTreeView::branch:closed:has-children:has-siblings {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/branch_closed.png);
+}
+
+QTreeView::branch:open:has-children:!has-siblings,
+QTreeView::branch:open:has-children:has-siblings {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/branch_open.png);
+}
+
+QTreeView::branch:has-children:!has-siblings:closed:hover,
+QTreeView::branch:closed:has-children:has-siblings:hover {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/branch_closed-on.png);
+}
+
+QTreeView::branch:open:has-children:!has-siblings:hover,
+QTreeView::branch:open:has-children:has-siblings:hover {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/branch_open-on.png);
+}
+
+QListView::item:!selected:hover,
+QTreeView::item:!selected:hover {
+ background: #18465d;
+ outline: 0;
+ color: #eff0f1;
+}
+
+QListView::item:selected:hover,
+QTreeView::item:selected:hover {
+ background: #287399;
+ color: #eff0f1;
+}
+
+QTreeView::indicator:checked,
+QListView::indicator:checked {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/checkbox_checked.png);
+}
+
+QTreeView::indicator:unchecked,
+QListView::indicator:unchecked {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/checkbox_unchecked.png);
+}
+
+QTreeView::indicator:checked:hover,
+QTreeView::indicator:checked:focus,
+QTreeView::indicator:checked:pressed,
+QListView::indicator:checked:hover,
+QListView::indicator:checked:focus,
+QListView::indicator:checked:pressed {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/checkbox_checked_focus.png);
+}
+
+QTreeView::indicator:unchecked:hover,
+QTreeView::indicator:unchecked:focus,
+QTreeView::indicator:unchecked:pressed,
+QListView::indicator:unchecked:hover,
+QListView::indicator:unchecked:focus,
+QListView::indicator:unchecked:pressed {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/checkbox_unchecked_focus.png);
+}
+
+/*================================================================
+QPushButton
+================================================================*/
+QPushButton {
+ color: #eff0f1;
+ background-color: #31363b;
+ border-width: 1px;
+ border-color: #76797C;
+ border-style: solid;
+ padding: 5px;
+ border-radius: 2px;
+ outline: none;
+}
+
+QPushButton:disabled {
+ background-color: #31363b;
+ border-width: 1px;
+ border-color: #454545;
+ border-style: solid;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-left: 10px;
+ padding-right: 10px;
+ border-radius: 2px;
+ color: #454545;
+}
+
+QPushButton:hover,
+QPushButton:focus {
+ background-color: #18465d;
+ color: #ffffff;
+}
+
+QPushButton:pressed {
+ background-color: #18465d;
+ padding-top: -15px;
+ padding-bottom: -17px;
+}
+
+QPushButton:checked {
+ background-color: #76797C;
+ border-color: #6A6969;
+}
+
+/*================================================================
+QToolButton - e.g. Reset pushbutton in GUI scaling, toolbar buttons
+================================================================*/
+QToolButton {
+ text-align: center;
+}
+
+/*================================================================
+QComboBox
+================================================================*/
+QComboBox {
+ selection-background-color: #db1c49;
+ border: 1px solid #76797C;
+ border-radius: 2px;
+ padding: 5px;
+ min-width: 75px;
+}
+
+QComboBox:hover,
+QPushButton:hover,
+QAbstractSpinBox:hover,
+QLineEdit:hover,
+QTextEdit:hover,
+QPlainTextEdit:hover,
+QAbstractView:hover,
+QTreeView:hover {
+ border: 1px solid #3daee9;
+ color: #eff0f1;
+}
+
+QComboBox:on {
+ padding-top: 3px;
+ padding-left: 4px;
+ selection-background-color: #4a4a4a;
+}
+
+QComboBox QAbstractItemView {
+ background-color: #232629;
+ border-radius: 2px;
+ border: 1px solid #76797C;
+ selection-background-color: #18465d;
+}
+
+QComboBox::drop-down {
+ subcontrol-origin: padding;
+ subcontrol-position: top right;
+ width: 35px;
+ border-left-width: 0px;
+ border-left-color: darkgray;
+ border-left-style: solid;
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+}
+
+QComboBox::down-arrow {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/down_arrow_disabled.png);
+}
+
+QComboBox::down-arrow:on,
+QComboBox::down-arrow:hover,
+QComboBox::down-arrow:focus {
+ image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/down_arrow.png);
+}
+
+/*================================================================
+QLineEdit - e.g. Search textbox in internal pdf viewer
+================================================================*/
+QLineEdit {
+ selection-background-color: #db1c49;
+ border: 1px solid #76797C;
+}
+
+/*================================================================
+QHeaderView
+================================================================*/
+QHeaderView {
+ background-color: #31363b;
+ border: 1px transparent;
+ border-radius: 0px;
+ margin: 0px;
+ padding: 0px;
+}
+
+QHeaderView::section {
+ background-color: #31363b;
+ color: #eff0f1;
+ padding: 5px;
+ border: 1px solid #76797C;
+ border-radius: 0px;
+ text-align: center;
+}
+
+QHeaderView::section::vertical::first,
+QHeaderView::section::vertical::only-one {
+ border-top: 1px solid #76797C;
+}
+
+QHeaderView::section::vertical {
+ border-top: transparent;
+}
+
+QHeaderView::section::horizontal::first,
+QHeaderView::section::horizontal::only-one {
+ border-left: 1px solid #76797C;
+}
+
+QHeaderView::section::horizontal {
+ border-left: transparent;
+}
+
+QHeaderView::section:checked {
+ color: #ffffff;
+ background-color: #31363B;
+}
+
+/*================================================================
+QTableWidget
+================================================================*/
+QTableWidget {
+ background-color: #373b3f; /*#232629;*/
+ gridline-color: yellow; /*#31363b;*/
+}
+
+QTableWidget::item {
+ outline-style: none;
+ color: #eff0f1;
+ background: #31363b;
+ border: none;
+ border-bottom: 1px solid #31363b;
+}
+
+/*================================================================
+QTableView - e.g. configMenu()->Syntax highlighting table
+================================================================*/
+QTableView {
+ border: 1px solid #76797C;
+ gridline-color: #31363b;
+ background-color: #232629;
+}
+
+QTableView,
+QHeaderView {
+ border-radius: 0px;
+}
+
+QTableView::item:hover {
+ background: #18465d;
+}
+
+QTableView::item:pressed,
+QListView::item:pressed,
+QTreeView::item:pressed {
+ background: #18465d;
+ color: #eff0f1;
+}
+
+QTableView::item:selected:active,
+QTreeView::item:selected:active,
+QListView::item:selected:active {
+ background: #287399;
+ color: #eff0f1;
+}
+
+QTableCornerButton::section {
+ background-color: #31363b;
+ border: 1px transparent #76797C;
+ border-radius: 0px;
+}
+
+/*================================================================
+QDialog - e.g. config menu, About TXS window, Wizards
+================================================================*/
+QDialog {
+ background-color: #373b3f;
+}
+
+QDialog QCheckBox,
+QDialog QLabel {
+ background-color: transparent;
+}
+
+QDialog QToolButton { /*Same as QPushButton*/
+ color: #eff0f1;
+ background-color: #31363b;
+ border-width: 1px;
+ border-color: #76797C;
+ border-style: solid;
+ padding: 5px;
+ border-radius: 2px;
+ outline: none;
+}
+
+QDialog QToolButton:hover,
+QDialog QToolButton:focus { /*Same as QPushButton*/
+ background-color: #18465d;
+ color: #ffffff;
+}
+
+QDialog QToolButton:pressed { /*Same as QPushButton*/
+ background-color: #18465d;
+ padding-top: -15px;
+ padding-bottom: -17px;
+}
+
+/* Specific to table in "configMenu->Syntax highlighting" (hopefully) */
+
+QDialog QTableWidget::item,
+QDialog QTableView::item:hover { /* Turn off hover colour for cells -- it's distracting */
+ background-color: #31363b;
+}
+
+/* */
+
+/*================================================================
+QSlider - e.g. GUI scaling settings
+================================================================*/
+QSlider,
+QSlider:active,
+QSlider:!active {
+ border: none;
+ background-color: transparent;
+}
+
+QSlider::groove:horizontal {
+ height: 12px;
+}
+
+QSlider::groove:vertical {
+ width: 12px;
+}
+
+QSlider::handle:horizontal,
+QSlider::handle:vertical {
+ background-color: #db1c49;
+ border: 1px solid #db1c49;
+ width: 10px;
+ height: 15px;
+ border-radius: 8px;
+}
+
+QSlider::handle:horizontal:hover,
+QSlider::handle:vertical:hover,
+QSlider::handle:horizontal:pressed,
+QSlider::handle:vertical:pressed {
+ border: 1px solid #A21538;
+ background-color: #A21538;
+}
+
+/*================================================================
+QToolTip - e.g. popup upon hovering on filename tabs
+================================================================*/
+QToolTip {
+ border: 1px solid #272a2d;
+ background-color: #373b3f;
+ color: white;
+ padding: 0px; /*remove padding, for fix combobox tooltip.*/
+}
diff --git a/client/webrtc_demo/qss/css/mainwindow.css b/client/webrtc_demo/qss/css/mainwindow.css
new file mode 100644
index 0000000..cf55514
--- /dev/null
+++ b/client/webrtc_demo/qss/css/mainwindow.css
@@ -0,0 +1,45 @@
+
+QTabBar{
+ background: rgb(22,155,213);
+}
+QTabBar::tab {
+ border: none;
+ border-top-left-radius: 4px;
+ color: white;
+ background: rgb(239,242,245);
+ color: black;
+
+ height: 28px;
+ min-width: 85px;
+ margin-right: 5px;
+}
+
+QTabBar::tab:hover {
+ background: rgb(51,101,177);
+}
+
+QTabBar::tab:selected {
+ color: white;
+ background: rgb(51,101,177);
+}
+
+
+
+QPushButton:enabled {
+ background: rgb(22,155,213);
+ color: white;
+ border-radius:3px;
+}
+
+QPushButton:!enabled {
+ background: white;
+ color: black;
+}
+
+QPushButton:enabled:hover {
+ background: rgb(100, 160, 220);
+}
+
+QPushButton:enabled:pressed {
+ background: rgb(120, 170, 220);
+}
diff --git a/client/webrtc_demo/qss/css/qss.css b/client/webrtc_demo/qss/css/qss.css
new file mode 100644
index 0000000..49d6aee
--- /dev/null
+++ b/client/webrtc_demo/qss/css/qss.css
@@ -0,0 +1,779 @@
+QDialog{
+ border: 1px solid rgb(rgb(0, 78, 161));
+ padding: 5px;
+ background: rgb(232, 241, 252);
+}
+
+QMainWindow{
+ border: none;
+ background: rgb(255, 255, 255);
+}
+
+QMainWindow::title{
+ text-align: right; /* align the text to the left */
+ background: rgb(7,71,166);
+ padding-left: 5px;
+}
+
+QWidget {
+/* font-size: 10px;*/
+}
+
+
+QDockWidget{
+ background: rgb(187, 212, 238);
+}
+/*QFrame#window{
+ background: rgba(244,245,247,100);
+}*/
+
+QWidget#remoteWidget {
+ border-top-right-radius: 10px;
+ border-bottom-right-radius: 10px;
+ border: 1px solid rgb(111, 156, 207);
+ border-left: none;
+ background: transparent;
+}
+
+StyledWidget {
+ qproperty-normalColor: rgb(65, 65, 65);
+ qproperty-disableColor: rgb(180, 180, 180);
+ qproperty-highlightColor: rgb(0, 160, 230);
+ qproperty-errorColor: red;
+}
+
+QProgressIndicator {
+ qproperty-color: rgb(2, 65, 132);
+}
+
+/**********提示**********/
+QToolTip{
+ border: 1px solid rgb(111, 156, 207);
+ background: white;
+ color: rgb(51, 51, 51);
+}
+
+/**********菜单栏**********/
+QMenuBar {
+/* background: rgb(7,71,166);*/
+ border: 1px solid rgb(111, 156, 207);
+ border-left: none;
+ border-right: none;
+}
+QMenuBar::item {
+ border: 1px solid transparent;
+ padding: 5px 10px 5px 10px;
+ height : 30px;
+ background: "white";
+ text-aligin: center;
+ font-size: 20px;;
+}
+QMenuBar::item:enabled {
+ font-size: 20px;;
+ background: rgb(198, 224, 252);
+}
+QMenuBar::item:!enabled {
+ font-size: 20px;;
+ background: rgb(198, 224, 252);
+}
+QMenuBar::item:enabled:selected {
+ font-size: 20px;;
+ background: rgb(198, 224, 252);
+}
+
+/**********菜单**********/
+QMenu {
+ border: 1px solid rgb(2, 65, 132);
+ background: rgb(232, 241, 250);
+ height : 50px;
+
+}
+
+QssMessageBox#messagebox{
+ background: rgb(0, 0, 250);
+}
+
+QMenu::item {
+ height: 22px;
+ padding: 0px 25px 0px 20px;
+}
+
+QMenu::item:enabled {
+ color: rgb(84, 84, 84);
+}
+
+QMenu::item:!enabled {
+ color: rgb(155, 155, 155);
+}
+
+QMenu::item:enabled:selected {
+ color: rgb(2, 65, 132);
+ background: rgba(255, 255, 255, 200);
+}
+
+QMenu::separator {
+ height: 1px;
+ background: rgb(111, 156, 207);
+}
+QMenu::indicator {
+ width: 13px;
+ height: 13px;
+}
+
+QMenu::icon {
+ padding-left: 2px;
+ padding-right: 2px;
+}
+
+/**********状态栏**********/
+QStatusBar {
+ background: rgb(111, 156, 207);
+ border: 1px solid rgb(111, 156, 207);
+ border-left: none;
+ border-right: none;
+ border-bottom: none;
+}
+
+QStatusBar::item {
+ border: none;
+ border-right: 1px solid rgb(111, 156, 207);
+}
+
+/**********分组框**********/
+QGroupBox {
+ border: 1px solid rgb(111, 156, 207);
+ border-radius: 4px;
+ margin-top: 10px;
+}
+
+QGroupBox::title {
+ color: rgb(56, 99, 154);
+ top: -12px;
+ left: 10px;
+}
+
+QTabWidget{
+ margin-left:10;
+}
+/**********页签项**********/
+QTabWidget::pane {
+ border: none;
+ border-top: 3px solid rgb(0, 78, 161);
+ background: rgb(187, 212, 238);
+}
+
+QTabWidget::tab-bar {
+ border: none;
+}
+
+QTabBar::tab {
+ border: none;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ color: white;
+ background: rgb(120, 170, 220);
+ height: 28px;
+ min-width: 85px;
+ margin-right: 5px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+QTabBar::tab:hover {
+ background: rgb(0, 78, 161);
+}
+
+QTabBar::tab:selected {
+ color: white;
+ background: rgb(0, 78, 161);
+}
+
+QTabWidget#tabWidget::pane {
+ border: 1px solid rgb(111, 156, 207);
+ background: rgb(232, 241, 252);
+ margin-top: -1px;
+}
+
+QTabBar#tabBar::tab {
+ border: 1px solid rgb(111, 156, 207);
+ border-bottom: none;
+ color: rgb(70, 71, 73);
+ background: transparent;
+}
+QTabBar#tabBar::tab:hover {
+ color: rgb(2, 65, 132);
+}
+QTabBar#tabBar::tab:selected {
+ color: rgb(2, 65, 132);
+ background: rgb(232, 241, 252);
+}
+
+/**********表头**********/
+QHeaderView{
+ border: 1px solid black;
+ border-bottom: 3px solid rgb(0, 78, 161);
+ background: transparent;
+ min-height: 30px;
+}
+QHeaderView::section:horizontal {
+ border: none;
+ color: rgb(2, 65, 132);
+ background: transparent;
+ padding-left: 5px;
+}
+QHeaderView::section:horizontal:hover {
+ color: white;
+ background: rgb(0, 78, 161);
+}
+QHeaderView::section:horizontal:pressed {
+ color: white;
+ background: rgb(6, 94, 187);
+}
+QHeaderView::up-arrow {
+ width: 13px;
+ height: 11px;
+ padding-right: 5px;
+ image: url(:/White/topArrow);
+ subcontrol-position: center right;
+}
+QHeaderView::up-arrow:hover, QHeaderView::up-arrow:pressed {
+ image: url(:/White/topArrowHover);
+}
+QHeaderView::down-arrow {
+ width: 13px;
+ height: 11px;
+ padding-right: 5px;
+ image: url(:/White/bottomArrow);
+ subcontrol-position: center right;
+}
+QHeaderView::down-arrow:hover, QHeaderView::down-arrow:pressed {
+ image: url(:/White/bottomArrowHover);
+}
+/**********TreeView**********/
+QTreeView::item {
+ height: 25px;
+ border-right: 0.5px solid grey;
+ background: transparent;
+}
+QTreeView::item:hover {
+ background : #DBDBDB;
+}
+
+QTreeView::item:selected {
+ background : grey;
+}
+/**********表格**********/
+QTableView {
+ border: 1px solid grey;
+ background: rgb(224, 238, 255);
+ gridline-color: rgb(111, 156, 207);
+}
+QTableView::item {
+ padding-left: 5px;
+ padding-right: 5px;
+ border: 1px solid black;
+ background: white;
+}
+QTableView::item:selected {
+ border: 1px solid black;
+
+ background: rgba(255, 255, 255, 30);
+}
+QTableView::item:selected:!active {
+ color: rgb(65, 65, 65);
+}
+QTableView::indicator {
+ border: 1px solid black;
+
+ width: 20px;
+ height: 20px;
+}
+
+
+QTableView::indicator:enabled:unchecked {
+
+ image: url(:/White/checkBox);
+}
+QTableView::indicator:enabled:unchecked:hover {
+ image: url(:/White/checkBoxHover);
+}
+QTableView::indicator:enabled:unchecked:pressed {
+ image: url(:/White/checkBoxPressed);
+}
+QTableView::indicator:enabled:checked {
+ image: url(:/White/checkBoxChecked);
+}
+QTableView::indicator:enabled:checked:hover {
+ image: url(:/White/checkBoxCheckedHover);
+}
+QTableView::indicator:enabled:checked:pressed {
+ image: url(:/White/checkBoxCheckedPressed);
+}
+QTableView::indicator:enabled:indeterminate {
+ image: url(:/White/checkBoxIndeterminate);
+}
+QTableView::indicator:enabled:indeterminate:hover {
+ image: url(:/White/checkBoxIndeterminateHover);
+}
+QTableView::indicator:enabled:indeterminate:pressed {
+ image: url(:/White/checkBoxIndeterminatePressed);
+}
+
+/**********滚动条-水平**********/
+QScrollBar:horizontal {
+ height: 20px;
+ background: transparent;
+ margin-top: 3px;
+ margin-bottom: 3px;
+}
+QScrollBar::handle:horizontal {
+ height: 20px;
+ min-width: 30px;
+ background: rgb(170, 200, 230);
+ margin-left: 15px;
+ margin-right: 15px;
+}
+QScrollBar::handle:horizontal:hover {
+ background: rgb(165, 195, 225);
+}
+QScrollBar::sub-line:horizontal {
+ width: 15px;
+ background: transparent;
+ image: url(:/White/arrowLeft);
+ subcontrol-position: left;
+}
+QScrollBar::add-line:horizontal {
+ width: 15px;
+ background: transparent;
+ image: url(:/White/arrowRight);
+ subcontrol-position: right;
+}
+QScrollBar::sub-line:horizontal:hover {
+ background: rgb(170, 200, 230);
+}
+QScrollBar::add-line:horizontal:hover {
+ background: rgb(170, 200, 230);
+}
+QScrollBar::add-page:horizontal,QScrollBar::sub-page:horizontal {
+ background: transparent;
+}
+
+/**********滚动条-垂直**********/
+QScrollBar:vertical {
+ width: 20px;
+ background: transparent;
+ margin-left: 3px;
+ margin-right: 3px;
+}
+QScrollBar::handle:vertical {
+ width: 20px;
+ min-height: 30px;
+ background: rgb(170, 200, 230);
+ margin-top: 15px;
+ margin-bottom: 15px;
+}
+QScrollBar::handle:vertical:hover {
+ background: rgb(165, 195, 225);
+}
+QScrollBar::sub-line:vertical {
+ height: 15px;
+ background: transparent;
+ image: url(:/White/topArrow);
+ subcontrol-position: top;
+}
+QScrollBar::add-line:vertical {
+ height: 15px;
+ background: transparent;
+ image: url(:/White/bottomArrow);
+ subcontrol-position: bottom;
+}
+QScrollBar::sub-line:vertical:hover {
+ background: rgb(170, 200, 230);
+}
+QScrollBar::add-line:vertical:hover {
+ background: rgb(170, 200, 230);
+}
+QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
+ background: transparent;
+}
+
+QScrollBar#verticalScrollBar:vertical {
+ margin-top: 30px;
+}
+
+/**********下拉列表**********/
+QComboBox {
+ height: 25px;
+ border: 1px solid rgb(111, 156, 207);
+ background: white;
+}
+QComboBox:enabled {
+ color: rgb(84, 84, 84);
+}
+QComboBox:!enabled {
+ color: rgb(80, 80, 80);
+}
+QComboBox:enabled:hover, QComboBox:enabled:focus {
+ color: rgb(51, 51, 51);
+}
+QComboBox::drop-down {
+ width: 20px;
+ border: none;
+ background: transparent;
+}
+QComboBox::drop-down:hover {
+ background: rgba(0, 0, 0, 30);
+}
+QComboBox::down-arrow {
+ image: url(:/qss/icon/combo_arrow.png);
+ max-height:100%;
+ max-width:100%;
+}
+QComboBox::down-arrow:on {
+ top: 1px;
+}
+QComboBox QAbstractItemView {
+ border: 1px solid rgb(111, 156, 207);
+ background: white;
+ outline: none;
+}
+QComboBox QAbstractItemView::item {
+ height: 25px;
+ color: rgb(73, 73, 73);
+}
+QComboBox QAbstractItemView::item:selected {
+ background: rgb(232, 241, 250);
+ color: rgb(2, 65, 132);
+}
+
+/**********进度条**********/
+QProgressBar{
+ border: black;
+ text-align: center;
+ color: white;
+ background: rgb(173, 202, 232);
+}
+QProgressBar::chunk {
+ background: rgb(16, 135, 209);
+}
+
+QProgressBar {
+ border: rgb(173, 202, 232);
+ text-align: center;
+ color: light;
+ background-color: transparent;
+ background-image: rgb(173, 202, 232);
+ background-repeat: repeat-x;
+}
+QProgressBar::chunk {
+ border: none;
+ background-color:rgb(173, 202, 232);
+ background-repeat: repeat-x;
+}
+
+/**********复选框**********/
+QCheckBox{
+ spacing: 5px;
+}
+QCheckBox:enabled:checked{
+ color: rgb(2, 65, 132);
+}
+QCheckBox:enabled:!checked{
+ color: rgb(70, 71, 73);
+}
+QCheckBox:enabled:hover{
+ color: rgb(0, 78, 161);
+}
+QCheckBox:!enabled{
+ color: rgb(80, 80, 80);
+}
+QCheckBox::indicator {
+ width: 20px;
+ height: 20px;
+}
+QCheckBox::indicator:unchecked {
+ image: url(:/qss/icon/checkbox.png);
+}
+QCheckBox::indicator:unchecked:hover {
+ image: url(:/qss/icon/checkbox_h.png);
+}
+QCheckBox::indicator:unchecked:pressed {
+ image: url(:/qss/icon/checkbox_p.png);
+}
+QCheckBox::indicator:checked {
+ image: url(:/qss/icon/check_box_p.png);
+}
+QCheckBox::indicator:checked:hover {
+ image: url(:/qss/icon/check_box_p.png);
+}
+QCheckBox::indicator:checked:pressed {
+ image: url(:/qss/icon/check_box_p.png);
+}
+QCheckBox::indicator:indeterminate {
+ image: url(:/qss/icon/check_box_p.png);
+}
+QCheckBox::indicator:indeterminate:hover {
+ image: url(:/qss/icon/check_box_p.png);
+}
+QCheckBox::indicator:indeterminate:pressed {
+ image: url(:/qss/icon/check_box_p.png);
+}
+
+/**********单选框**********/
+QRadioButton{
+ spacing: 5px;
+}
+QRadioButton:enabled:checked{
+ color: rgb(2, 65, 132);
+}
+QRadioButton:enabled:!checked{
+ color: rgb(70, 71, 73);
+}
+QRadioButton:enabled:hover{
+ color: rgb(0, 78, 161);
+}
+QRadioButton:!enabled{
+ color: rgb(80, 80, 80);
+}
+QRadioButton::indicator {
+ width: 20px;
+ height: 20px;
+}
+QRadioButton::indicator:unchecked {
+ image: url(:/White/radioButton);
+}
+QRadioButton::indicator:unchecked:hover {
+ image: url(:/White/radioButtonHover);
+}
+QRadioButton::indicator:unchecked:pressed {
+ image: url(:/White/radioButtonPressed);
+}
+QRadioButton::indicator:checked {
+ image: url(:/White/radioButtonChecked);
+}
+QRadioButton::indicator:checked:hover {
+ image: url(:/White/radioButtonCheckedHover);
+}
+QRadioButton::indicator:checked:pressed {
+ image: url(:/White/radioButtonCheckedPressed);
+}
+
+/**********输入框**********/
+QLineEdit {
+ border-radius: 4px;
+ height: 25px;
+ border: 1px solid rgb(111, 156, 207);
+ background: white;
+}
+QLineEdit:enabled {
+ color: rgb(84, 84, 84);
+}
+QLineEdit:enabled:hover, QLineEdit:enabled:focus {
+ color: rgb(51, 51, 51);
+}
+QLineEdit:!enabled {
+ color: rgb(80, 80, 80);
+}
+
+/**********文本编辑框**********/
+QTextEdit {
+ border: 1px solid rgb(111, 156, 207);
+ color: rgb(70, 71, 73);
+ background: rgb(187, 212, 238);
+}
+
+/**********滚动区域**********/
+QScrollArea {
+ border: 1px solid rgb(111, 156, 207);
+ background: rgb(187, 212, 238);
+}
+
+/**********滚动区域**********/
+QWidget#transparentWidget {
+ background: transparent;
+}
+
+/**********微调器**********/
+QSpinBox {
+ border-radius: 4px;
+ height: 24px;
+ min-width: 40px;
+ border: 1px solid rgb(111, 156, 207);
+ background: white;
+}
+QSpinBox:enabled {
+ color: rgb(60, 60, 60);
+}
+QSpinBox:enabled:hover, QSpinBox:enabled:focus {
+ color: rgb(51, 51, 51);
+}
+QSpinBox:!enabled {
+ color: rgb(210, 210, 210);
+ background: transparent;
+}
+QSpinBox::up-button {
+ border-left: 1px solid rgb(111, 156, 207);
+ width: 18px;
+ height: 12px;
+ border-top-right-radius: 4px;
+ image: url(:/White/upButton);
+}
+QSpinBox::up-button:!enabled {
+ background: transparent;
+}
+QSpinBox::up-button:enabled:hover {
+ background: rgb(255, 255, 255, 30);
+}
+QSpinBox::down-button {
+ border-left: 1px solid rgb(111, 156, 207);
+ width: 18px;
+ height: 12px;
+ border-bottom-right-radius: 4px;
+ image: url(:/White/downButton);
+}
+QSpinBox::down-button:!enabled {
+ background: transparent;
+}
+QSpinBox::down-button:hover {
+ background: rgb(255, 255, 255, 30);
+}
+QLabel#label_3{
+ font-size: 20px;
+ background-color: rgb(255, 255, 255, 30);
+ color : light;
+}
+
+QDockWidget *{
+}
+/**********标签**********/
+QLabel#grayLabel {
+ color: rgb(70, 71, 73);
+}
+
+QLabel#highlightLabel {
+ color: rgb(2, 65, 132);
+}
+
+QLabel#redLabel {
+ color: red;
+}
+
+QLabel#grayYaHeiLabel {
+ color: rgb(175, 175, 175);
+ font-size: 15px;
+}
+
+QLabel#blueLabel {
+ color: rgb(0, 160, 230);
+}
+
+QLabel#listLabel {
+ color: rgb(51, 51, 51);
+}
+
+QLabel#lineBlueLabel {
+ background: rgb(0, 78, 161);
+}
+
+QLabel#graySeperateLabel {
+ background: rgb(200, 220, 230);
+}
+
+QLabel#seperateLabel {
+ background: rgb(112, 153, 194);
+}
+
+QLabel#radiusBlueLabel {
+ border-radius: 15px;
+ color: white;
+ font-size: 18px;
+ background: rgb(0, 78, 161);
+}
+
+QLabel#skinLabel[colorProperty="normal"] {
+ color: rgb(56, 99, 154);
+}
+QLabel#skinLabel[colorProperty="highlight"] {
+ color: rgb(0, 160, 230);
+}
+
+QLabel#informationLabel {
+ qproperty-pixmap: url(:/White/information);
+}
+
+QLabel#errorLabel {
+ qproperty-pixmap: url(:/White/error);
+}
+
+QLabel#successLabel {
+ qproperty-pixmap: url(:/White/success);
+}
+
+QLabel#questionLabel {
+ qproperty-pixmap: url(:/White/question);
+}
+
+QLabel#warningLabel {
+ qproperty-pixmap: url(:/White/warning);
+}
+
+QLabel#groupLabel {
+ color: rgb(56, 99, 154);
+ border: 1px solid rgb(111, 156, 207);
+ font-size: 15px;
+ border-top-color: transparent;
+ border-right-color: transparent;
+ border-left-color: transparent;
+}
+
+/**********按钮**********/
+QToolButton#nsccButton {
+ border: none;
+ color: rgb(2, 65, 132);
+ background: transparent;
+ padding: 10px;
+ qproperty-icon: url(:/White/nscc);
+ qproperty-iconSize: 32px 32px;
+ qproperty-toolButtonStyle: ToolButtonTextUnderIcon;
+}
+QToolButton#nsccButton:hover {
+ background: rgb(187, 212, 238);
+}
+
+QToolButton#transferButton {
+ border: none;
+ color: rgb(2, 65, 132);
+ background: transparent;
+ padding: 10px;
+ qproperty-icon: url(:/White/transfer);
+ qproperty-iconSize: 32px 32px;
+ qproperty-toolButtonStyle: ToolButtonTextUnderIcon;
+}
+
+QToolButton#transferButton:hover {
+ background: rgb(187, 212, 238);
+}
+
+/**********按钮**********/
+QPushButton{
+ border: none; /*去除边框*/
+ font-size: 15px;
+}
+
+QPushButton:enabled {
+ background: rgb(0, 78, 161);
+ color: white;
+}
+
+QPushButton:!enabled {
+ background: rgb(180, 180, 180);
+ color: white;
+}
+
+QPushButton:enabled:hover{
+ background: rgb(100, 160, 220);
+}
+
+QPushButton:enabled:pressed{
+ background: rgb(120, 170, 220);
+}
diff --git a/client/webrtc_demo/qss/css/save_data_form.css b/client/webrtc_demo/qss/css/save_data_form.css
new file mode 100644
index 0000000..d5ce63b
--- /dev/null
+++ b/client/webrtc_demo/qss/css/save_data_form.css
@@ -0,0 +1,6 @@
+QWidget#save_data_form
+{
+ background: "white";
+ border:1px solid black;
+}
+
diff --git a/client/webrtc_demo/qss/css/vibration_comparison_form.css b/client/webrtc_demo/qss/css/vibration_comparison_form.css
new file mode 100644
index 0000000..4a6cbd6
--- /dev/null
+++ b/client/webrtc_demo/qss/css/vibration_comparison_form.css
@@ -0,0 +1,46 @@
+QWidget#vibration_comparison_form
+{
+ border: 1px solid black;
+}
+QWidget#vibration_comparison_form QLabel#label
+{
+}
+QWidget#vibration_comparison_form QComboBox#comboBox
+{
+ border-radius:3px;
+}
+QWidget#vibration_comparison_form QComboBox#comboBox_2
+{
+ border-radius:3px;
+}
+QWidget#vibration_comparison_form QLabel#label_2
+{
+}
+QWidget#vibration_comparison_form QComboBox#comboBox_3
+{
+ border-radius:3px;
+
+}
+QWidget#vibration_comparison_form QComboBox#comboBox_4
+{
+ border-radius:3px;
+}
+QWidget#vibration_comparison_form QPushButton#pushButton
+{
+ width: 24px;
+}
+
+QWidget#vibration_comparison_form QPushButton#pushButton_2
+{
+ width: 24px;
+
+}
+QWidget#vibration_comparison_form QLabel#label_3
+{
+}
+QWidget#vibration_comparison_form QRadioButton#radioButton
+{
+}
+QWidget#vibration_comparison_form QGraphicsView#graphicsView
+{
+}
diff --git a/client/webrtc_demo/qss/css/white.css b/client/webrtc_demo/qss/css/white.css
new file mode 100644
index 0000000..847d018
--- /dev/null
+++ b/client/webrtc_demo/qss/css/white.css
@@ -0,0 +1,303 @@
+/* * The MIT License (MIT) * * Copyright : http://blog.csdn.net/liang19890820 * * Author : 一去丶二三里 * * Date : 2016/07/22 * * Description : 白色靓丽 * */
+
+/**********子界面背景**********/
+QWidget#customWidget { background: rgb(173, 202, 232); }
+
+/**********子界面中央背景**********/
+QWidget#centerWidget { background: rgb(232, 241, 252); }
+
+/**********主界面样式**********/
+QWidget#mainWindow { border: 1px solid rgb(111, 156, 207); background: rgb(232, 241, 252); }
+
+QWidget#messageWidget { background: rgba(173, 202, 232, 50%); }
+
+QWidget#loadingWidget { border: none; border-radius: 5px; background: rgb(187, 212, 238); }
+
+QWidget#remoteWidget { border-top-right-radius: 10px; border-bottom-right-radius: 10px; border: 1px solid rgb(111, 156, 207); border-left: none; background: transparent; }
+
+StyledWidget { qproperty-normalColor: rgb(65, 65, 65); qproperty-disableColor: rgb(180, 180, 180); qproperty-highlightColor: rgb(0, 160, 230); qproperty-errorColor: red; }
+
+QProgressIndicator { qproperty-color: rgb(2, 65, 132); }
+
+/**********提示**********/
+QToolTip{ border: 1px solid rgb(111, 156, 207); background: white; color: rgb(51, 51, 51); }
+
+/**********菜单栏**********/
+QMenuBar { background: rgb(187, 212, 238); border: 1px solid rgb(111, 156, 207); border-left: none; border-right: none; }
+QMenuBar::item { border: 1px solid transparent; padding: 5px 10px 5px 10px; background: transparent; }
+QMenuBar::item:enabled { color: rgb(2, 65, 132); }
+QMenuBar::item:!enabled { color: rgb(155, 155, 155); }
+QMenuBar::item:enabled:selected { border-top-color: rgb(111, 156, 207); border-bottom-color: rgb(111, 156, 207); background: rgb(198, 224, 252); }
+
+/**********菜单**********/
+QMenu { border: 1px solid rgb(111, 156, 207); background: rgb(232, 241, 250); }
+QMenu::item { height: 22px; padding: 0px 25px 0px 20px; }
+QMenu::item:enabled { color: rgb(84, 84, 84); }
+QMenu::item:!enabled { color: rgb(155, 155, 155); }
+QMenu::item:enabled:selected { color: rgb(2, 65, 132); background: rgba(255, 255, 255, 200); }
+QMenu::separator { height: 1px; background: rgb(111, 156, 207); }
+QMenu::indicator { width: 13px; height: 13px; }
+QMenu::icon { padding-left: 2px; padding-right: 2px; }
+
+/**********状态栏**********/
+QStatusBar { background: rgb(187, 212, 238); border: 1px solid rgb(111, 156, 207); border-left: none; border-right: none; border-bottom: none; }
+QStatusBar::item { border: none; border-right: 1px solid rgb(111, 156, 207); }
+
+/**********分组框**********/
+QGroupBox { font-size: 15px; border: 1px solid rgb(111, 156, 207); border-radius: 4px; margin-top: 10px; }
+QGroupBox::title { color: rgb(56, 99, 154); top: -12px; left: 10px; }
+
+/**********页签项**********/
+QTabWidget::pane { border: none; border-top: 3px solid rgb(0, 78, 161); background: rgb(187, 212, 238); }
+QTabWidget::tab-bar { border: none; }
+QTabBar::tab { border: none; border-top-left-radius: 4px; border-top-right-radius: 4px; color: white; background: rgb(120, 170, 220); height: 28px; min-width: 85px; margin-right: 5px; padding-left: 5px; padding-right: 5px; }
+QTabBar::tab:hover { background: rgb(0, 78, 161); }
+QTabBar::tab:selected { color: white; background: rgb(0, 78, 161); }
+
+QTabWidget#tabWidget::pane { border: 1px solid rgb(111, 156, 207); background: rgb(232, 241, 252); margin-top: -1px; }
+
+QTabBar#tabBar::tab { border: 1px solid rgb(111, 156, 207); border-bottom: none; color: rgb(70, 71, 73); background: transparent; }
+QTabBar#tabBar::tab:hover { color: rgb(2, 65, 132); }
+QTabBar#tabBar::tab:selected { color: rgb(2, 65, 132); background: rgb(232, 241, 252); }
+
+/**********表头**********/
+QHeaderView{ border: none; border-bottom: 3px solid rgb(0, 78, 161); background: transparent; min-height: 30px; }
+QHeaderView::section:horizontal { border: none; color: rgb(2, 65, 132); background: transparent; padding-left: 5px; }
+QHeaderView::section:horizontal:hover { color: white; background: rgb(0, 78, 161); }
+QHeaderView::section:horizontal:pressed { color: white; background: rgb(6, 94, 187); }
+QHeaderView::up-arrow { width: 13px; height: 11px; padding-right: 5px; image: url(:/White/topArrow); subcontrol-position: center right; }
+QHeaderView::up-arrow:hover, QHeaderView::up-arrow:pressed { image: url(:/White/topArrowHover); }
+QHeaderView::down-arrow { width: 13px; height: 11px; padding-right: 5px; image: url(:/White/bottomArrow); subcontrol-position: center right; }
+QHeaderView::down-arrow:hover, QHeaderView::down-arrow:pressed { image: url(:/White/bottomArrowHover); }
+
+/**********表格**********/
+QTableView { border: 1px solid rgb(111, 156, 207); background: rgb(224, 238, 255); gridline-color: rgb(111, 156, 207); }
+QTableView::item { padding-left: 5px; padding-right: 5px; border: none; background: white; border-right: 1px solid rgb(111, 156, 207); border-bottom: 1px solid rgb(111, 156, 207); }
+QTableView::item:selected { background: rgba(255, 255, 255, 100); }
+QTableView::item:selected:!active { color: rgb(65, 65, 65); }
+QTableView::indicator { width: 20px; height: 20px; }
+QTableView::indicator:enabled:unchecked { image: url(:/White/checkBox); }
+QTableView::indicator:enabled:unchecked:hover { image: url(:/White/checkBoxHover); }
+QTableView::indicator:enabled:unchecked:pressed { image: url(:/White/checkBoxPressed); }
+QTableView::indicator:enabled:checked { image: url(:/White/checkBoxChecked); }
+QTableView::indicator:enabled:checked:hover { image: url(:/White/checkBoxCheckedHover); }
+QTableView::indicator:enabled:checked:pressed { image: url(:/White/checkBoxCheckedPressed); }
+QTableView::indicator:enabled:indeterminate { image: url(:/White/checkBoxIndeterminate); }
+QTableView::indicator:enabled:indeterminate:hover { image: url(:/White/checkBoxIndeterminateHover); }
+QTableView::indicator:enabled:indeterminate:pressed { image: url(:/White/checkBoxIndeterminatePressed); }
+
+/**********滚动条-水平**********/
+QScrollBar:horizontal { height: 20px; background: transparent; margin-top: 3px; margin-bottom: 3px; }
+QScrollBar::handle:horizontal { height: 20px; min-width: 30px; background: rgb(170, 200, 230); margin-left: 15px; margin-right: 15px; }
+QScrollBar::handle:horizontal:hover { background: rgb(165, 195, 225); }
+QScrollBar::sub-line:horizontal { width: 15px; background: transparent; image: url(:/White/arrowLeft); subcontrol-position: left; }
+QScrollBar::add-line:horizontal { width: 15px; background: transparent; image: url(:/White/arrowRight); subcontrol-position: right; }
+QScrollBar::sub-line:horizontal:hover { background: rgb(170, 200, 230); }
+QScrollBar::add-line:horizontal:hover { background: rgb(170, 200, 230); }
+QScrollBar::add-page:horizontal,QScrollBar::sub-page:horizontal { background: transparent; }
+
+/**********滚动条-垂直**********/
+QScrollBar:vertical { width: 20px; background: transparent; margin-left: 3px; margin-right: 3px; }
+QScrollBar::handle:vertical { width: 20px; min-height: 30px; background: rgb(170, 200, 230); margin-top: 15px; margin-bottom: 15px; }
+QScrollBar::handle:vertical:hover { background: rgb(165, 195, 225); }
+QScrollBar::sub-line:vertical { height: 15px; background: transparent; image: url(:/White/topArrow); subcontrol-position: top; }
+QScrollBar::add-line:vertical { height: 15px; background: transparent; image: url(:/White/bottomArrow); subcontrol-position: bottom; }
+QScrollBar::sub-line:vertical:hover { background: rgb(170, 200, 230); }
+QScrollBar::add-line:vertical:hover { background: rgb(170, 200, 230); }
+QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { background: transparent; }
+
+QScrollBar#verticalScrollBar:vertical { margin-top: 30px; }
+
+/**********下拉列表**********/
+QComboBox { height: 25px; border-radius: 4px; border: 1px solid rgb(111, 156, 207); background: white; }
+QComboBox:enabled { color: rgb(84, 84, 84); }
+QComboBox:!enabled { color: rgb(80, 80, 80); }
+QComboBox:enabled:hover, QComboBox:enabled:focus { color: rgb(51, 51, 51); }
+QComboBox::drop-down { width: 20px; border: none; background: transparent; }
+QComboBox::drop-down:hover { background: rgba(255, 255, 255, 30); }
+QComboBox::down-arrow { image: url(:/White/arrowBottom); }
+QComboBox::down-arrow:on { /**top: 1px;**/ }
+QComboBox QAbstractItemView { border: 1px solid rgb(111, 156, 207); background: white; outline: none; }
+QComboBox QAbstractItemView::item { height: 25px; color: rgb(73, 73, 73); }
+QComboBox QAbstractItemView::item:selected { background: rgb(232, 241, 250); color: rgb(2, 65, 132); }
+
+/**********进度条**********/
+QProgressBar{ border: none; text-align: center; color: white; background: rgb(173, 202, 232); }
+QProgressBar::chunk { background: rgb(16, 135, 209); }
+
+QProgressBar#progressBar { border: none; text-align: center; color: white; background-color: transparent; background-image: url(":/White/progressBar"); background-repeat: repeat-x; }
+QProgressBar#progressBar::chunk { border: none; background-color: transparent; background-image: url(":/White/progressBarChunk"); background-repeat: repeat-x; }
+
+/**********复选框**********/
+QCheckBox{ spacing: 5px; }
+QCheckBox:enabled:checked{ color: rgb(2, 65, 132); }
+QCheckBox:enabled:!checked{ color: rgb(70, 71, 73); }
+QCheckBox:enabled:hover{ color: rgb(0, 78, 161); }
+QCheckBox:!enabled{ color: rgb(80, 80, 80); }
+QCheckBox::indicator { width: 20px; height: 20px; }
+QCheckBox::indicator:unchecked { image: url(:/White/checkBox); }
+QCheckBox::indicator:unchecked:hover { image: url(:/White/checkBoxHover); }
+QCheckBox::indicator:unchecked:pressed { image: url(:/White/checkBoxPressed); }
+QCheckBox::indicator:checked { image: url(:/White/checkBoxChecked); }
+QCheckBox::indicator:checked:hover { image: url(:/White/checkBoxCheckedHover); }
+QCheckBox::indicator:checked:pressed { image: url(:/White/checkBoxCheckedPressed); }
+QCheckBox::indicator:indeterminate { image: url(:/White/checkBoxIndeterminate); }
+QCheckBox::indicator:indeterminate:hover { image: url(:/White/checkBoxIndeterminateHover); }
+QCheckBox::indicator:indeterminate:pressed { image: url(:/White/checkBoxIndeterminatePressed); }
+
+/**********单选框**********/
+QRadioButton{ spacing: 5px; }
+QRadioButton:enabled:checked{ color: rgb(2, 65, 132); }
+QRadioButton:enabled:!checked{ color: rgb(70, 71, 73); }
+QRadioButton:enabled:hover{ color: rgb(0, 78, 161); }
+QRadioButton:!enabled{ color: rgb(80, 80, 80); }
+QRadioButton::indicator { width: 20px; height: 20px; }
+QRadioButton::indicator:unchecked { image: url(:/White/radioButton); }
+QRadioButton::indicator:unchecked:hover { image: url(:/White/radioButtonHover); }
+QRadioButton::indicator:unchecked:pressed { image: url(:/White/radioButtonPressed); }
+QRadioButton::indicator:checked { image: url(:/White/radioButtonChecked); }
+QRadioButton::indicator:checked:hover { image: url(:/White/radioButtonCheckedHover); }
+QRadioButton::indicator:checked:pressed { image: url(:/White/radioButtonCheckedPressed); }
+
+/**********输入框**********/
+QLineEdit { border-radius: 4px; height: 25px; border: 1px solid rgb(111, 156, 207); background: white; }
+QLineEdit:enabled { color: rgb(84, 84, 84); }
+QLineEdit:enabled:hover, QLineEdit:enabled:focus { color: rgb(51, 51, 51); }
+QLineEdit:!enabled { color: rgb(80, 80, 80); }
+
+/**********文本编辑框**********/
+QTextEdit { border: 1px solid rgb(111, 156, 207); color: rgb(70, 71, 73); background: rgb(187, 212, 238); }
+
+/**********滚动区域**********/
+QScrollArea { border: 1px solid rgb(111, 156, 207); background: rgb(187, 212, 238); }
+
+/**********滚动区域**********/
+QWidget#transparentWidget { background: transparent; }
+
+/**********微调器**********/
+QSpinBox { border-radius: 4px; height: 24px; min-width: 40px; border: 1px solid rgb(111, 156, 207); background: white; }
+QSpinBox:enabled { color: rgb(60, 60, 60); }
+QSpinBox:enabled:hover, QSpinBox:enabled:focus { color: rgb(51, 51, 51); }
+QSpinBox:!enabled { color: rgb(210, 210, 210); background: transparent; }
+QSpinBox::up-button { border-left: 1px solid rgb(111, 156, 207); width: 18px; height: 12px; border-top-right-radius: 4px; image: url(:/White/upButton); }
+QSpinBox::up-button:!enabled { background: transparent; }
+QSpinBox::up-button:enabled:hover { background: rgb(255, 255, 255, 30); }
+QSpinBox::down-button { border-left: 1px solid rgb(111, 156, 207); width: 18px; height: 12px; border-bottom-right-radius: 4px; image: url(:/White/downButton); }
+QSpinBox::down-button:!enabled { background: transparent; }
+QSpinBox::down-button:hover { background: rgb(255, 255, 255, 30); }
+
+/**********标签**********/
+QLabel#grayLabel { color: rgb(70, 71, 73); }
+
+QLabel#highlightLabel { color: rgb(2, 65, 132); }
+
+QLabel#redLabel { color: red; }
+
+QLabel#grayYaHeiLabel { color: rgb(175, 175, 175); font-size: 16px; }
+
+QLabel#blueLabel { color: rgb(0, 160, 230); }
+
+QLabel#listLabel { color: rgb(51, 51, 51); }
+
+QLabel#lineBlueLabel { background: rgb(0, 78, 161); }
+
+QLabel#graySeperateLabel { background: rgb(200, 220, 230); }
+
+QLabel#seperateLabel { background: rgb(112, 153, 194); }
+
+QLabel#radiusBlueLabel { border-radius: 15px; color: white; font-size: 16px; background: rgb(0, 78, 161); }
+
+QLabel#skinLabel[colorProperty="normal"] { color: rgb(56, 99, 154); }
+QLabel#skinLabel[colorProperty="highlight"] { color: rgb(0, 160, 230); }
+
+QLabel#informationLabel { qproperty-pixmap: url(:/White/information); }
+
+QLabel#errorLabel { qproperty-pixmap: url(:/White/error); }
+
+QLabel#successLabel { qproperty-pixmap: url(:/White/success); }
+
+QLabel#questionLabel { qproperty-pixmap: url(:/White/question); }
+
+QLabel#warningLabel { qproperty-pixmap: url(:/White/warning); }
+
+QLabel#groupLabel { color: rgb(56, 99, 154); border: 1px solid rgb(111, 156, 207); font-size: 15px; border-top-color: transparent; border-right-color: transparent; border-left-color: transparent; }
+
+/**********按钮**********/
+QToolButton#nsccButton { border: none; color: rgb(2, 65, 132); background: transparent; padding: 10px; qproperty-icon: url(:/White/nscc); qproperty-iconSize: 32px 32px; qproperty-toolButtonStyle: ToolButtonTextUnderIcon; }
+QToolButton#nsccButton:hover { background: rgb(187, 212, 238); }
+
+QToolButton#transferButton { border: none; color: rgb(2, 65, 132); background: transparent; padding: 10px; qproperty-icon: url(:/White/transfer); qproperty-iconSize: 32px 32px; qproperty-toolButtonStyle: ToolButtonTextUnderIcon; }
+QToolButton#transferButton:hover { background: rgb(187, 212, 238); }
+
+/**********按钮**********/
+QPushButton{ border-radius: 4px; border: none; width: 75px; height: 25px; }
+QPushButton:enabled { background: rgb(120, 170, 220); color: white; }
+QPushButton:!enabled { background: rgb(180, 180, 180); color: white; }
+QPushButton:enabled:hover{ background: rgb(100, 160, 220); }
+QPushButton:enabled:pressed{ background: rgb(0, 78, 161); }
+
+QPushButton#blueButton { color: white; }
+QPushButton#blueButton:enabled { background: rgb(0, 78, 161); color: white; }
+QPushButton:!enabled { background: rgb(180, 180, 180); color: white; }
+QPushButton#blueButton:enabled:hover { background: rgb(2, 65, 132); }
+QPushButton#blueButton:enabled:pressed { background: rgb(6, 94, 187); }
+
+QPushButton#selectButton { border: none; border-radius: none; border-left: 1px solid rgb(111, 156, 207); background: transparent; image: url(:/White/scan); color: rgb(51, 51, 51); }
+QPushButton#selectButton:enabled:hover{ background: rgb(187, 212, 238); }
+QPushButton#selectButton:enabled:pressed{ background: rgb(120, 170, 220); }
+
+QPushButton#linkButton { background: transparent; color: rgb(0, 160, 230); text-align:left; }
+QPushButton#linkButton:hover { color: rgb(20, 185, 255); text-decoration: underline; }
+QPushButton#linkButton:pressed { color: rgb(0, 160, 230); }
+
+QPushButton#transparentButton { background: transparent; }
+
+/*****************标题栏按钮*******************/
+QPushButton#minimizeButton { border-radius: none; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; background: rgb(120, 170, 220); image: url(:/White/minimizeHover); }
+QPushButton#minimizeButton:hover { image: url(:/White/minimize); }
+QPushButton#minimizeButton:pressed { image: url(:/White/minimizePressed); }
+
+QPushButton#maximizeButton[maximizeProperty="maximize"] { border-radius: none; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; background: rgb(120, 170, 220); image: url(:/White/maximizeHover); }
+QPushButton#maximizeButton[maximizeProperty="maximize"]:hover { image: url(:/White/maximize); }
+QPushButton#maximizeButton[maximizeProperty="maximize"]:pressed { image: url(:/White/maximizePressed); }
+
+QPushButton#maximizeButton[maximizeProperty="restore"] { border-radius: none; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; background: rgb(120, 170, 220); image: url(:/White/restoreHover); }
+QPushButton#maximizeButton[maximizeProperty="restore"]:hover { image: url(:/White/restore); }
+QPushButton#maximizeButton[maximizeProperty="restore"]:pressed { image: url(:/White/restorePressed); }
+
+QPushButton#closeButton { border-radius: none; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; background: rgb(120, 170, 220); image: url(:/White/closeHover); }
+QPushButton#closeButton:hover { image: url(:/White/close); }
+QPushButton#closeButton:pressed { image: url(:/White/closePressed); }
+
+QPushButton#skinButton { border-radius: none; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; background: rgb(120, 170, 220); image: url(:/White/skinHover); }
+QPushButton#skinButton:hover { image: url(:/White/skin); }
+QPushButton#skinButton:pressed { image: url(:/White/skinPressed); }
+
+QPushButton#feedbackButton { border-radius: none; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; background: rgb(120, 170, 220); image: url(:/White/feedbackHover); }
+QPushButton#feedbackButton:hover { image: url(:/White/feedback); }
+QPushButton#feedbackButton:pressed { image: url(:/White/feedbackPressed); }
+
+QPushButton#closeTipButton { border-radius: none; border-image: url(:/White/close); background: transparent; }
+QPushButton#closeTipButton:hover { border-image: url(:/White/closeHover); }
+QPushButton#closeTipButton:pressed { border-image: url(:/White/closePressed); }
+
+QPushButton#changeSkinButton{ border-radius: 4px; border: 2px solid rgb(111, 156, 207); background: rgb(204, 227, 252); }
+QPushButton#changeSkinButton:hover{ border-color: rgb(60, 150, 200); }
+QPushButton#changeSkinButton:pressed, QPushButton#changeSkinButton:checked{ border-color: rgb(0, 160, 230); }
+
+QPushButton#transferButton { padding-left: 5px; padding-right: 5px; color: white; background: rgb(0, 78, 161); }
+QPushButton#transferButton:hover { background: rgb(2, 65, 132); }
+QPushButton#transferButton:pressed { background: rgb(6, 94, 187); }
+QPushButton#transferButton[iconProperty="left"] { qproperty-icon: url(:/White/left); }
+QPushButton#transferButton[iconProperty="right"] { qproperty-icon: url(:/White/right); }
+
+QPushButton#openButton { border-radius: none; image: url(:/White/open); background: transparent; }
+QPushButton#openButton:hover { image: url(:/White/openHover); }
+QPushButton#openButton:pressed { image: url(:/White/openPressed); }
+
+QPushButton#deleteButton { border-radius: none; image: url(:/White/delete); background: transparent; }
+QPushButton#deleteButton:hover { image: url(:/White/deleteHover); }
+QPushButton#deleteButton:pressed { image: url(:/White/deletePressed); }
+
+QPushButton#menuButton { text-align: left center; padding-left: 3px; color: rgb(84, 84, 84); border: 1px solid rgb(111, 156, 207); background: white; }
+QPushButton#menuButton::menu-indicator{ subcontrol-position: right center; subcontrol-origin: padding; image: url(:/White/arrowBottom); padding-right: 3px; }
diff --git a/client/webrtc_demo/qss/icon/1-最大化.svg b/client/webrtc_demo/qss/icon/1-最大化.svg
new file mode 100644
index 0000000..b704561
--- /dev/null
+++ b/client/webrtc_demo/qss/icon/1-最大化.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/client/webrtc_demo/qss/icon/Thumbs.db b/client/webrtc_demo/qss/icon/Thumbs.db
new file mode 100644
index 0000000..fb49600
Binary files /dev/null and b/client/webrtc_demo/qss/icon/Thumbs.db differ
diff --git a/client/webrtc_demo/qss/icon/action_config.png b/client/webrtc_demo/qss/icon/action_config.png
new file mode 100644
index 0000000..f7e64b6
Binary files /dev/null and b/client/webrtc_demo/qss/icon/action_config.png differ
diff --git a/client/webrtc_demo/qss/icon/array.svg b/client/webrtc_demo/qss/icon/array.svg
new file mode 100644
index 0000000..7ae234d
--- /dev/null
+++ b/client/webrtc_demo/qss/icon/array.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/client/webrtc_demo/qss/icon/boolean.svg b/client/webrtc_demo/qss/icon/boolean.svg
new file mode 100644
index 0000000..6592ee0
--- /dev/null
+++ b/client/webrtc_demo/qss/icon/boolean.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/client/webrtc_demo/qss/icon/btn_close_down.png b/client/webrtc_demo/qss/icon/btn_close_down.png
new file mode 100644
index 0000000..814cdc7
Binary files /dev/null and b/client/webrtc_demo/qss/icon/btn_close_down.png differ
diff --git a/client/webrtc_demo/qss/icon/btn_close_down.svg b/client/webrtc_demo/qss/icon/btn_close_down.svg
new file mode 100644
index 0000000..095ee89
--- /dev/null
+++ b/client/webrtc_demo/qss/icon/btn_close_down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/client/webrtc_demo/qss/icon/btn_close_highlight.png b/client/webrtc_demo/qss/icon/btn_close_highlight.png
new file mode 100644
index 0000000..2bc66bb
Binary files /dev/null and b/client/webrtc_demo/qss/icon/btn_close_highlight.png differ
diff --git a/client/webrtc_demo/qss/icon/btn_close_normal.png b/client/webrtc_demo/qss/icon/btn_close_normal.png
new file mode 100644
index 0000000..11c1f52
Binary files /dev/null and b/client/webrtc_demo/qss/icon/btn_close_normal.png differ
diff --git a/client/webrtc_demo/qss/icon/btn_data.png b/client/webrtc_demo/qss/icon/btn_data.png
new file mode 100644
index 0000000..61329e1
Binary files /dev/null and b/client/webrtc_demo/qss/icon/btn_data.png differ
diff --git a/client/webrtc_demo/qss/icon/btn_max_down.png b/client/webrtc_demo/qss/icon/btn_max_down.png
new file mode 100644
index 0000000..ab159f8
Binary files /dev/null and b/client/webrtc_demo/qss/icon/btn_max_down.png differ
diff --git a/client/webrtc_demo/qss/icon/btn_max_highlight.png b/client/webrtc_demo/qss/icon/btn_max_highlight.png
new file mode 100644
index 0000000..f9a2a1b
Binary files /dev/null and b/client/webrtc_demo/qss/icon/btn_max_highlight.png differ
diff --git a/client/webrtc_demo/qss/icon/btn_max_normal.png b/client/webrtc_demo/qss/icon/btn_max_normal.png
new file mode 100644
index 0000000..cb065af
Binary files /dev/null and b/client/webrtc_demo/qss/icon/btn_max_normal.png differ
diff --git a/client/webrtc_demo/qss/icon/btn_max_normal.svg b/client/webrtc_demo/qss/icon/btn_max_normal.svg
new file mode 100644
index 0000000..daacc05
--- /dev/null
+++ b/client/webrtc_demo/qss/icon/btn_max_normal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/client/webrtc_demo/qss/icon/btn_mini_down.png b/client/webrtc_demo/qss/icon/btn_mini_down.png
new file mode 100644
index 0000000..d7a579a
Binary files /dev/null and b/client/webrtc_demo/qss/icon/btn_mini_down.png differ
diff --git a/client/webrtc_demo/qss/icon/btn_mini_down.svg b/client/webrtc_demo/qss/icon/btn_mini_down.svg
new file mode 100644
index 0000000..4ae753b
--- /dev/null
+++ b/client/webrtc_demo/qss/icon/btn_mini_down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/client/webrtc_demo/qss/icon/btn_mini_highlight.png b/client/webrtc_demo/qss/icon/btn_mini_highlight.png
new file mode 100644
index 0000000..71b6020
Binary files /dev/null and b/client/webrtc_demo/qss/icon/btn_mini_highlight.png differ
diff --git a/client/webrtc_demo/qss/icon/btn_mini_normal.png b/client/webrtc_demo/qss/icon/btn_mini_normal.png
new file mode 100644
index 0000000..644727a
Binary files /dev/null and b/client/webrtc_demo/qss/icon/btn_mini_normal.png differ
diff --git a/client/webrtc_demo/qss/icon/btn_restore_down.png b/client/webrtc_demo/qss/icon/btn_restore_down.png
new file mode 100644
index 0000000..67b4705
Binary files /dev/null and b/client/webrtc_demo/qss/icon/btn_restore_down.png differ
diff --git a/client/webrtc_demo/qss/icon/btn_restore_down.svg b/client/webrtc_demo/qss/icon/btn_restore_down.svg
new file mode 100644
index 0000000..04bc9e2
--- /dev/null
+++ b/client/webrtc_demo/qss/icon/btn_restore_down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/client/webrtc_demo/qss/icon/btn_restore_highlight.png b/client/webrtc_demo/qss/icon/btn_restore_highlight.png
new file mode 100644
index 0000000..f57eb81
Binary files /dev/null and b/client/webrtc_demo/qss/icon/btn_restore_highlight.png differ
diff --git a/client/webrtc_demo/qss/icon/btn_restore_normal.png b/client/webrtc_demo/qss/icon/btn_restore_normal.png
new file mode 100644
index 0000000..e53f9c1
Binary files /dev/null and b/client/webrtc_demo/qss/icon/btn_restore_normal.png differ
diff --git a/client/webrtc_demo/qss/icon/btn_serial.png b/client/webrtc_demo/qss/icon/btn_serial.png
new file mode 100644
index 0000000..8543aa8
Binary files /dev/null and b/client/webrtc_demo/qss/icon/btn_serial.png differ
diff --git a/client/webrtc_demo/qss/icon/charts.png b/client/webrtc_demo/qss/icon/charts.png
new file mode 100644
index 0000000..ddb2e5b
Binary files /dev/null and b/client/webrtc_demo/qss/icon/charts.png differ
diff --git a/client/webrtc_demo/qss/icon/check_box_p.png b/client/webrtc_demo/qss/icon/check_box_p.png
new file mode 100644
index 0000000..33c8d49
Binary files /dev/null and b/client/webrtc_demo/qss/icon/check_box_p.png differ
diff --git a/client/webrtc_demo/qss/icon/checkbox.png b/client/webrtc_demo/qss/icon/checkbox.png
new file mode 100644
index 0000000..2c56aa4
Binary files /dev/null and b/client/webrtc_demo/qss/icon/checkbox.png differ
diff --git a/client/webrtc_demo/qss/icon/checkbox_h.png b/client/webrtc_demo/qss/icon/checkbox_h.png
new file mode 100644
index 0000000..3d89dc3
Binary files /dev/null and b/client/webrtc_demo/qss/icon/checkbox_h.png differ
diff --git a/client/webrtc_demo/qss/icon/checkbox_p.png b/client/webrtc_demo/qss/icon/checkbox_p.png
new file mode 100644
index 0000000..8f8d37b
Binary files /dev/null and b/client/webrtc_demo/qss/icon/checkbox_p.png differ
diff --git a/client/webrtc_demo/qss/icon/close_main.png b/client/webrtc_demo/qss/icon/close_main.png
new file mode 100644
index 0000000..3356428
Binary files /dev/null and b/client/webrtc_demo/qss/icon/close_main.png differ
diff --git a/client/webrtc_demo/qss/icon/code-array.svg b/client/webrtc_demo/qss/icon/code-array.svg
new file mode 100644
index 0000000..0434557
--- /dev/null
+++ b/client/webrtc_demo/qss/icon/code-array.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/client/webrtc_demo/qss/icon/combo_arrow.png b/client/webrtc_demo/qss/icon/combo_arrow.png
new file mode 100644
index 0000000..a054bcd
Binary files /dev/null and b/client/webrtc_demo/qss/icon/combo_arrow.png differ
diff --git a/client/webrtc_demo/qss/icon/dataflow.svg b/client/webrtc_demo/qss/icon/dataflow.svg
new file mode 100644
index 0000000..0c69265
--- /dev/null
+++ b/client/webrtc_demo/qss/icon/dataflow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/client/webrtc_demo/qss/icon/downarrow.png b/client/webrtc_demo/qss/icon/downarrow.png
new file mode 100644
index 0000000..b810e44
Binary files /dev/null and b/client/webrtc_demo/qss/icon/downarrow.png differ
diff --git a/client/webrtc_demo/qss/icon/hor_scroll_left_arrow.png b/client/webrtc_demo/qss/icon/hor_scroll_left_arrow.png
new file mode 100644
index 0000000..1093f6e
Binary files /dev/null and b/client/webrtc_demo/qss/icon/hor_scroll_left_arrow.png differ
diff --git a/client/webrtc_demo/qss/icon/hor_scroll_right_arrow.png b/client/webrtc_demo/qss/icon/hor_scroll_right_arrow.png
new file mode 100644
index 0000000..cc3bf17
Binary files /dev/null and b/client/webrtc_demo/qss/icon/hor_scroll_right_arrow.png differ
diff --git a/client/webrtc_demo/qss/icon/int.png b/client/webrtc_demo/qss/icon/int.png
new file mode 100644
index 0000000..1052220
Binary files /dev/null and b/client/webrtc_demo/qss/icon/int.png differ
diff --git a/client/webrtc_demo/qss/icon/int.svg b/client/webrtc_demo/qss/icon/int.svg
new file mode 100644
index 0000000..9ce427c
--- /dev/null
+++ b/client/webrtc_demo/qss/icon/int.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/client/webrtc_demo/qss/icon/key.svg b/client/webrtc_demo/qss/icon/key.svg
new file mode 100644
index 0000000..cda69f7
--- /dev/null
+++ b/client/webrtc_demo/qss/icon/key.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/client/webrtc_demo/qss/icon/logo.png b/client/webrtc_demo/qss/icon/logo.png
new file mode 100644
index 0000000..5fbeb2a
Binary files /dev/null and b/client/webrtc_demo/qss/icon/logo.png differ
diff --git a/client/webrtc_demo/qss/icon/missing.svg b/client/webrtc_demo/qss/icon/missing.svg
new file mode 100644
index 0000000..fba40ff
--- /dev/null
+++ b/client/webrtc_demo/qss/icon/missing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/client/webrtc_demo/qss/icon/objects.svg b/client/webrtc_demo/qss/icon/objects.svg
new file mode 100644
index 0000000..2f33712
--- /dev/null
+++ b/client/webrtc_demo/qss/icon/objects.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/client/webrtc_demo/qss/icon/radio.png b/client/webrtc_demo/qss/icon/radio.png
new file mode 100644
index 0000000..8c32808
Binary files /dev/null and b/client/webrtc_demo/qss/icon/radio.png differ
diff --git a/client/webrtc_demo/qss/icon/radio_h.png b/client/webrtc_demo/qss/icon/radio_h.png
new file mode 100644
index 0000000..84407ba
Binary files /dev/null and b/client/webrtc_demo/qss/icon/radio_h.png differ
diff --git a/client/webrtc_demo/qss/icon/radio_p.png b/client/webrtc_demo/qss/icon/radio_p.png
new file mode 100644
index 0000000..4f32d5e
Binary files /dev/null and b/client/webrtc_demo/qss/icon/radio_p.png differ
diff --git a/client/webrtc_demo/qss/icon/sizegrip.png b/client/webrtc_demo/qss/icon/sizegrip.png
new file mode 100644
index 0000000..f2667b9
Binary files /dev/null and b/client/webrtc_demo/qss/icon/sizegrip.png differ
diff --git a/client/webrtc_demo/qss/icon/string.svg b/client/webrtc_demo/qss/icon/string.svg
new file mode 100644
index 0000000..924a541
--- /dev/null
+++ b/client/webrtc_demo/qss/icon/string.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/client/webrtc_demo/qss/icon/ver_scroll_bottom_arrow.png b/client/webrtc_demo/qss/icon/ver_scroll_bottom_arrow.png
new file mode 100644
index 0000000..2be161f
Binary files /dev/null and b/client/webrtc_demo/qss/icon/ver_scroll_bottom_arrow.png differ
diff --git a/client/webrtc_demo/qss/icon/ver_scroll_top_arrow.png b/client/webrtc_demo/qss/icon/ver_scroll_top_arrow.png
new file mode 100644
index 0000000..a8e4fed
Binary files /dev/null and b/client/webrtc_demo/qss/icon/ver_scroll_top_arrow.png differ
diff --git a/client/webrtc_demo/qss/icon/关闭.svg b/client/webrtc_demo/qss/icon/关闭.svg
new file mode 100644
index 0000000..90e1a95
--- /dev/null
+++ b/client/webrtc_demo/qss/icon/关闭.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/client/webrtc_demo/qss/icon/最小化.svg b/client/webrtc_demo/qss/icon/最小化.svg
new file mode 100644
index 0000000..171b4f6
--- /dev/null
+++ b/client/webrtc_demo/qss/icon/最小化.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/client/webrtc_demo/qss/qss.qrc b/client/webrtc_demo/qss/qss.qrc
new file mode 100644
index 0000000..5792182
--- /dev/null
+++ b/client/webrtc_demo/qss/qss.qrc
@@ -0,0 +1,56 @@
+
+
+ icon/btn_close_down.png
+ icon/btn_close_highlight.png
+ icon/btn_close_normal.png
+ icon/btn_max_down.png
+ icon/btn_max_highlight.png
+ icon/btn_max_normal.png
+ icon/btn_mini_down.png
+ icon/btn_mini_highlight.png
+ icon/btn_mini_normal.png
+ icon/btn_restore_down.png
+ icon/btn_restore_highlight.png
+ icon/btn_restore_normal.png
+ icon/checkbox.png
+ icon/checkbox_h.png
+ icon/checkbox_p.png
+ icon/downarrow.png
+ icon/hor_scroll_left_arrow.png
+ icon/hor_scroll_right_arrow.png
+ icon/radio.png
+ icon/radio_h.png
+ icon/radio_p.png
+ icon/ver_scroll_bottom_arrow.png
+ icon/ver_scroll_top_arrow.png
+ icon/sizegrip.png
+ css/qss.css
+ icon/btn_serial.png
+ css/white.css
+ css/dark.css
+ icon/btn_data.png
+ icon/dataflow.svg
+ icon/check_box_p.png
+ icon/combo_arrow.png
+ icon/charts.png
+ icon/btn_max_normal.svg
+ icon/btn_restore_down.svg
+ icon/btn_mini_down.svg
+ icon/btn_close_down.svg
+ icon/close_main.png
+ icon/logo.png
+ icon/key.svg
+ icon/action_config.png
+ icon/int.svg
+ icon/objects.svg
+ icon/string.svg
+ icon/missing.svg
+ css/QssMainWindow.css
+ css/QssTitleBar.css
+ css/corrugation_form.css
+ css/vibration_comparison_form.css
+ css/mainwindow.css
+ css/basic.css
+ css/save_data_form.css
+
+
diff --git a/client/webrtc_demo/src/MyCapturer.cpp b/client/webrtc_demo/src/camera_capture.cpp
similarity index 89%
rename from client/webrtc_demo/src/MyCapturer.cpp
rename to client/webrtc_demo/src/camera_capture.cpp
index 18f33a8..ed7c83f 100644
--- a/client/webrtc_demo/src/MyCapturer.cpp
+++ b/client/webrtc_demo/src/camera_capture.cpp
@@ -1,36 +1,35 @@
-#include "MyCapturer.h"
+#include "camera_capture.h"
#include "rtc_base/thread.h"
#include
#include
#include
#include "easylog.h"
-MyCapturer::MyCapturer() {
+CameraCapturer::CameraCapturer() {
}
-void MyCapturer::startCapturer() {
+void CameraCapturer::startCapturer() {
auto options = webrtc::DesktopCaptureOptions::CreateDefault();
options.set_allow_directx_capturer(true);
capturer_ = webrtc::DesktopCapturer::CreateScreenCapturer(options);
capturer_->Start(this);
CaptureFrame();
-
}
-webrtc::MediaSourceInterface::SourceState MyCapturer::state() const {
+webrtc::MediaSourceInterface::SourceState CameraCapturer::state() const {
return webrtc::MediaSourceInterface::kLive;
}
-bool MyCapturer::remote() const {
+bool CameraCapturer::remote() const {
return false;
}
-bool MyCapturer::is_screencast() const {
+bool CameraCapturer::is_screencast() const {
return true;
}
-absl::optional MyCapturer::needs_denoising() const {
+absl::optional CameraCapturer::needs_denoising() const {
return false;
}
@@ -95,25 +94,19 @@ static void RawToBmp(unsigned char *pRawImage, int ImageHeight, int ImageWidth,
}
}
}
-
-
int dw = ImageWidth*bitcount / 8;
for (int i = 0; i < ImageHeight; i++)
{
memcpy(imgData + headerLength + dataSizePerLine*i, pRawImage + dw*i, dw);
}
-
-
FILE *fp_bmp;
fp_bmp = fopen(filePath.c_str()/*"temp.bmp"*/, "wb");
fwrite((void*)imgData, bfSize, 1, fp_bmp);
fclose(fp_bmp);
-
-
}
-void MyCapturer::OnCaptureResult(webrtc::DesktopCapturer::Result result,
+void CameraCapturer::OnCaptureResult(webrtc::DesktopCapturer::Result result,
std::unique_ptr frame) {
if (result != webrtc::DesktopCapturer::Result::SUCCESS)
return;
@@ -131,12 +124,12 @@ void MyCapturer::OnCaptureResult(webrtc::DesktopCapturer::Result result,
OnFrame(webrtc::VideoFrame(i420_buffer_, 0, 0, webrtc::kVideoRotation_0));
}
-void MyCapturer::OnMessage(rtc::Message* msg) {
+void CameraCapturer::OnMessage(rtc::Message* msg) {
if (msg->message_id == 0)
CaptureFrame();
}
-void MyCapturer::CaptureFrame() {
+void CameraCapturer::CaptureFrame() {
capturer_->CaptureFrame();
rtc::Location loc(__FUNCTION__, __FILE__,__LINE__);
diff --git a/client/webrtc_demo/src/MyCapturer.h b/client/webrtc_demo/src/camera_capture.h
similarity index 84%
rename from client/webrtc_demo/src/MyCapturer.h
rename to client/webrtc_demo/src/camera_capture.h
index b7c976e..63e48c9 100644
--- a/client/webrtc_demo/src/MyCapturer.h
+++ b/client/webrtc_demo/src/camera_capture.h
@@ -12,29 +12,23 @@
#include "rtc_base/message_handler.h"
#include "libyuv.h"
-class MyCapturer : public rtc::AdaptedVideoTrackSource,
+class CameraCapturer : public rtc::AdaptedVideoTrackSource,
public rtc::MessageHandler,
public webrtc::DesktopCapturer::Callback {
- public:
- MyCapturer();
-
+public:
+ CameraCapturer();
void startCapturer();
-
void CaptureFrame();
-
bool is_screencast() const override;
absl::optional needs_denoising() const override;
-
webrtc::MediaSourceInterface::SourceState state() const override;
-
bool remote() const override;
-
void OnCaptureResult(webrtc::DesktopCapturer::Result result,
- std::unique_ptr frame) override;
+ std::unique_ptr frame) override;
void OnMessage(rtc::Message* msg) override;
- private:
+private:
std::unique_ptr capturer_;
rtc::scoped_refptr i420_buffer_;
//mutable volatile int ref_count_;
diff --git a/client/webrtc_demo/src/cplaywidget.cpp b/client/webrtc_demo/src/cplaywidget.cpp
index b7899b3..730767c 100644
--- a/client/webrtc_demo/src/cplaywidget.cpp
+++ b/client/webrtc_demo/src/cplaywidget.cpp
@@ -271,7 +271,6 @@ void CPlayWidget::paintGL()
void CPlayWidget::initShaderYuv()
{
//?????????????????tex_y, tex_u, tex_v????,??????????????????
- //??????????????????
textureUniformY = m_pShaderProgram->uniformLocation("tex_y");
textureUniformU = m_pShaderProgram->uniformLocation("tex_u");
textureUniformV = m_pShaderProgram->uniformLocation("tex_v");
diff --git a/client/webrtc_demo/src/main.cpp b/client/webrtc_demo/src/main.cpp
index 0e320a5..5804837 100644
--- a/client/webrtc_demo/src/main.cpp
+++ b/client/webrtc_demo/src/main.cpp
@@ -45,11 +45,12 @@
#include "api/video/i420_buffer.h"
#include "signal_client.h"
#include
-
+#include
#pragma comment (lib,"advapi32.lib")
extern"C"
+
BOOLEAN WINAPI SystemFunction036(PVOID, ULONG);
#pragma comment(lib, "ws2_32.lib")
@@ -66,31 +67,10 @@ BOOLEAN WINAPI SystemFunction036(PVOID, ULONG);
#pragma comment(lib, "Gdi32.lib")
-void EnumCapture()
-{
- std::unique_ptr info(
- webrtc::VideoCaptureFactory::CreateDeviceInfo());
- int num_devices = info->NumberOfDevices();
- if (!info) {
- RTC_LOG(LERROR) << "CreateDeviceInfo failed";
- return;
- }
- for (int i = 0; i < num_devices; ++i) {
- char name[128];
- char id[128];
- info->GetDeviceName(i,name,128,id,128,nullptr,0);
- int cap_len = info->NumberOfCapabilities(id);
- for(int j = 0;j < cap_len;j++){
- webrtc::VideoCaptureCapability p;
- info->GetCapability(id,j,p);
- qDebug()<>("rtc::scoped_refptr");
qRegisterMetaType>("rtc::scoped_refptr&");
@@ -102,6 +82,7 @@ void InitCustomMetaType(){
}
+
int main(int argc, char *argv[])
{
InitCustomMetaType();
@@ -117,7 +98,11 @@ int main(int argc, char *argv[])
QCoreApplication::setAttribute(Qt::AA_DisableHighDpiScaling);
QApplication a(argc, argv);
MainWindow w;
+ w.setFixedSize(1024,768);
+ w.setWindowTitle(QString("webrtc janus demo "));
w.show();
return a.exec();
}
+
+
diff --git a/client/webrtc_demo/src/mainwindow.cpp b/client/webrtc_demo/src/mainwindow.cpp
index 1f012fb..3c5daca 100644
--- a/client/webrtc_demo/src/mainwindow.cpp
+++ b/client/webrtc_demo/src/mainwindow.cpp
@@ -2,7 +2,7 @@
#include "ui_mainwindow.h"
#include
#include
-#include "MyCapturer.h"
+#include "camera_capture.h"
#include
#include
#include
@@ -17,6 +17,50 @@ const char kCandidateSdpMlineIndexName[] = "sdpMLineIndex";
const char kCandidateSdpName[] = "candidate";
+typedef struct {
+ std::string id;
+ std::string name;
+ std::vector caps;
+} VideoDevice;
+
+std::vector EnumCaptures()
+{
+ std::vector ret;
+ std::unique_ptr info(
+ webrtc::VideoCaptureFactory::CreateDeviceInfo());
+
+ int num_devices = info->NumberOfDevices();
+ if (!info) {
+ RTC_LOG(LERROR) << "CreateDeviceInfo failed";
+ return ret;
+ }
+ for (int i = 0; i < num_devices; ++i) {
+ VideoDevice v;
+ char name[128];
+ char id[128];
+
+ info->GetDeviceName(i,name,128,id,128,nullptr,0);
+ int cap_len = info->NumberOfCapabilities(id);
+ for(int j = 0;j < cap_len;j++){
+ webrtc::VideoCaptureCapability p;
+ info->GetCapability(id,j,p);
+ qDebug()<())
,mSignalClient(nullptr)
@@ -62,6 +106,12 @@ MainWindow::MainWindow(QWidget *parent)
,mLocalVideoTrack(nullptr)
{
ui->setupUi(this);
+ std::vector devices = EnumCaptures();
+
+ for(auto itr = devices.begin();itr != devices.end();itr++){
+ ui->comboBox->addItem(QString::fromStdString(itr->name),QString::fromStdString(itr->name));
+ }
+
ui->openGLWidget->show();
TCHAR username[UNLEN + 1];
@@ -76,6 +126,9 @@ MainWindow::MainWindow(QWidget *parent)
this,SLOT(on_local_sdp(QString)));
connect((WebrtcHanlder*)(mHandler.get()),SIGNAL(OnRemoteTrack(webrtc::MediaStreamTrackInterface*)),
this,SLOT(on_track_add(webrtc::MediaStreamTrackInterface*)));
+
+ mHandler->InitWebrtc();
+
}
MainWindow::~MainWindow()
@@ -102,7 +155,6 @@ WebrtcHanlder::WebrtcHanlder()
int WebrtcHanlder::InitWebrtc()
{
-
m_peer_connection_factory_ = webrtc::CreatePeerConnectionFactory(
nullptr /* network_thread */, nullptr /* worker_thread */,
nullptr /* signaling_thread */, nullptr /* default_adm */,
@@ -133,7 +185,7 @@ int WebrtcHanlder::InitWebrtc()
config, nullptr, nullptr, this);
if (!m_peer_connection_) {
- auto x = new QMessageBox(nullptr);
+ auto x = new QMessageBox(nullptr);
x->setText("创建peerconnection失败");
x->show();
exit(0);
@@ -231,6 +283,7 @@ void WebrtcHanlder::SetRemoteCandidate(QString sdp)
void WebrtcHanlder::CreateAnwer()
{
qDebug()<<"create answer";
+ qDebug()<CreateAnswer(
this, webrtc::PeerConnectionInterface::RTCOfferAnswerOptions());
gLog()->Log((QString::asprintf("%s %d",__FILE__,__LINE__) +
@@ -267,7 +320,7 @@ void WebrtcHanlder::AddLocalTrack()
gLog()->Log((QString::asprintf("%s %d",__FILE__,__LINE__) +
" m_peer_connection_ AddTrack" + kAudioLabel).toStdString());
if(mVideoTrack == nullptr){
- rtc::scoped_refptr video_device = new rtc::RefCountedObject();
+ rtc::scoped_refptr video_device = new rtc::RefCountedObject();
if (video_device) {
video_device->startCapturer();
rtc::scoped_refptr video_track_(
@@ -446,7 +499,7 @@ void MainWindow::signal_response(int type,QJsonObject data)
{
qDebug()<mModel->clear();
for (auto itr = data.begin();itr != data.end();itr++){
auto item = new QStandardItem(itr.key());
@@ -454,7 +507,7 @@ void MainWindow::signal_response(int type,QJsonObject data)
mModel->appendRow(item);
}
break;
- case 2005:
+ case 2005: // RESP_SENDSDP
{
auto sdp = data["sdp"].toString();
auto remote_name = data["remote_name"].toString();
@@ -466,7 +519,7 @@ void MainWindow::signal_response(int type,QJsonObject data)
mHandler->CreateAnwer();
break;
}
- case 2006:
+ case 2006: //RESP_SENDCANDIDATE
{
auto candidate = data["candidate"].toString();
auto remote_names = data["remote_name"].toString();
@@ -488,7 +541,6 @@ void MainWindow::itemClicked(QModelIndex index)
qDebug()<<"请先连接信令服务";
return;
}
- mHandler->InitWebrtc();
this->mLocalVideoTrack = mHandler->VideoTrack();
qDebug()<item(index.row())->text();
diff --git a/client/webrtc_demo/src/mainwindow.h b/client/webrtc_demo/src/mainwindow.h
index 10568d8..efaef21 100644
--- a/client/webrtc_demo/src/mainwindow.h
+++ b/client/webrtc_demo/src/mainwindow.h
@@ -29,6 +29,7 @@
#include "api/video/i420_buffer.h"
#include "signal_client.h"
#include
+#include "Qss.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
@@ -148,7 +149,7 @@ private:
webrtc::AudioTrackInterface *mAudioTrack;
};
-class MainWindow :public QMainWindow
+class MainWindow :public QssMainWindow
{
Q_OBJECT
public:
diff --git a/client/webrtc_demo/src/mainwindow.ui b/client/webrtc_demo/src/mainwindow.ui
index 2fa6b9b..68b43e5 100644
--- a/client/webrtc_demo/src/mainwindow.ui
+++ b/client/webrtc_demo/src/mainwindow.ui
@@ -6,8 +6,8 @@
0
0
- 1056
- 616
+ 1166
+ 776
@@ -73,7 +73,7 @@
-
- ws://192.168.5.73:9555/ws
+ ws://192.168.5.192:9555/ws
diff --git a/client/webrtc_demo/src/signal_client.cpp b/client/webrtc_demo/src/signal_client.cpp
index fac3d65..1b87103 100644
--- a/client/webrtc_demo/src/signal_client.cpp
+++ b/client/webrtc_demo/src/signal_client.cpp
@@ -160,7 +160,6 @@ void SignalClient::onSocketError(QAbstractSocket::SocketError error)
qDebug()<Log((QString::asprintf("%s %d",__FILE__,__LINE__) +
" WebSocket unconnected").toStdString());
-
}
void SignalClient::onReconenectTimeout()
diff --git a/client/webrtc_demo/src/video_capture.cpp b/client/webrtc_demo/src/video_capture.cpp
index 01435af..0ee77dd 100644
--- a/client/webrtc_demo/src/video_capture.cpp
+++ b/client/webrtc_demo/src/video_capture.cpp
@@ -79,9 +79,9 @@ void VcmCapturerTest::OnFrame(const webrtc::VideoFrame& frame) {
std::chrono::system_clock::now().time_since_epoch()).count();
static size_t cnt = 0;
-// RTC_LOG(LS_INFO) << "OnFrame "<type()
-// <<" stride "<GetI420()->StrideY()<< frame.video_frame_buffer().get()->GetI420()->StrideU() ;
+ RTC_LOG(LS_INFO) << "OnFrame "<type()
+ <<" stride "<GetI420()->StrideY()<< frame.video_frame_buffer().get()->GetI420()->StrideU() ;
int m_height = frame.height();
int m_width = frame.width();
diff --git a/client/webrtc_demo/src/video_capturer_test.h b/client/webrtc_demo/src/video_capturer_test.h
index c199b2d..d5c8703 100644
--- a/client/webrtc_demo/src/video_capturer_test.h
+++ b/client/webrtc_demo/src/video_capturer_test.h
@@ -13,6 +13,10 @@
#include
#include
+
+void EnumCapture();
+
+
class VideoCapturerTest : public QObject,
public rtc::VideoSourceInterface{
Q_OBJECT
diff --git a/client/webrtc_demo/webrtc_demo.pro b/client/webrtc_demo/webrtc_demo.pro
index 1697823..d329001 100644
--- a/client/webrtc_demo/webrtc_demo.pro
+++ b/client/webrtc_demo/webrtc_demo.pro
@@ -1,6 +1,8 @@
QT += core gui websockets
+include(D:\\project\\c++qt\\qsswraper\\qsswraper.pri)
+RESOURCES += $$PWD/qss/qss.qrc
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
@@ -21,7 +23,7 @@ INCLUDEPATH += third/include/
LIBS += -L$$PWD/third/lib libwebrtc.lib ole32.lib oleaut32.lib strmiids.lib yuv.lib
SOURCES += \
- src/MyCapturer.cpp \
+ src/camera_capture.cpp \
src/cplaywidget.cpp \
src/easylog.cpp \
src/main.cpp \
@@ -31,7 +33,7 @@ SOURCES += \
src/video_capturer_test.cpp
HEADERS += \
- src/MyCapturer.h \
+ src/camera_capture.h \
src/cplaywidget.h \
src/easylog.h \
src/mainwindow.h \