# include "home.h"
# include "ui_home.h" Home :: Home ( QWidget * parent) : QWidget ( parent) , ui ( new Ui:: Home)
{ ui-> setupUi ( this ) ; QSettings settings ( "kim" , "ad" ) ; username = settings. value ( "username" ) . toString ( ) ; usertype = settings. value ( "usertype" ) . toString ( ) ; ui-> usertypelabel-> setText ( usertype) ; if ( usertype== "学生" ) { ui-> listframe-> hide ( ) ; ui-> setframe-> hide ( ) ; ui-> mainframe-> hide ( ) ; QFrame * stuframe = new QFrame ( ) ; stuframe-> setParent ( this ) ; stuframe-> setStyleSheet ( "width:100px;height:100px;background-color: rgb(250, 250, 250);" ) ; stuframe-> move ( 100 , 0 ) ; teachEdit = new QLineEdit ( this ) ; teachEdit-> move ( 200 , 50 ) ; teachEdit-> setStyleSheet ( "background-color:#ffffff;color:#000000;width:200px;height:30px;border-radius:7px;color:#000000;padding-left:10px;" ) ; teachEdit-> setPlaceholderText ( "请输入教师账号" ) ; adkeyEdit = new QLineEdit ( this ) ; adkeyEdit-> move ( 200 , 90 ) ; adkeyEdit-> setStyleSheet ( "background-color:#ffffff;color:#000000;width:200px;height:30px;border-radius:7px;color:#000000;padding-left:10px;" ) ; adkeyEdit-> setPlaceholderText ( "请输入签到验证码" ) ; adkeybtn = new QPushButton ( this ) ; adkeybtn-> move ( 200 , 170 ) ; adkeybtn-> setText ( "签到" ) ; adkeybtn-> setStyleSheet ( "background-color:#000000;color:#ffffff;width:200px;height:40px;border-radius:7px;" ) ; connect ( adkeybtn, & QPushButton:: clicked, this , & Home:: onAdKeyBtnClicked) ; stuHintLable = new QLabel ( this ) ; stuHintLable-> move ( 210 , 140 ) ; stuHintLable-> setFixedWidth ( 200 ) ; stuHintLable-> setStyleSheet ( "color:rgb(222, 60, 51);height:40px;" ) ; } ui-> usernamelabel-> setText ( username) ; ui-> usertypelabel-> setAlignment ( Qt:: AlignCenter) ; closeAllpage ( ) ; openAdPage ( ) ;
} Home :: ~ Home ( )
{ delete ui;
} void Home :: onAdKeyBtnClicked ( ) { if ( teachEdit-> text ( ) == "" ) { stuHintLable-> setText ( "教师账号不能为空" ) ; stuHintLable-> setStyleSheet ( "color:rgb(222, 60, 51);height:40px;" ) ; } else if ( adkeyEdit-> text ( ) == "" ) { stuHintLable-> setText ( "签到激活码不能为空" ) ; stuHintLable-> setStyleSheet ( "color:rgb(222, 60, 51);height:40px;" ) ; } else { socket = new QTcpSocket ( this ) ; socket-> connectToHost ( ip, port) ; connect ( socket, & QTcpSocket:: connected, this , & Home:: stuad_connected_slot) ; connect ( socket, & QTcpSocket:: readyRead, this , & Home:: stuad_readyRead_slot) ; } } void Home :: startad_connected_slot ( )
{ struct data user; user. type= STARTAD; user. username= username; user. value= generateRandomString ( 6 ) ; ui-> hintlable_3-> setText ( "签到码:" + user. value) ; ui-> startattendancebtn-> setStyleSheet ( "background-color:#ffffff;border-radius:7px;border:1px solid #000000;color:#000000;" ) ; socket-> write ( user. toByteArray ( ) ) ;
} void Home :: startad_readyRead_slot ( )
{ QByteArray rawData = socket-> readAll ( ) ; const char * rawCharArray = rawData. constData ( ) ; socketinfo receivedInfo; memcpy ( & receivedInfo, rawCharArray, sizeof ( socketinfo) ) ; outputlog ( receivedInfo. data) ; socket-> disconnectFromHost ( ) ;
} void Home :: endad_connected_slot ( )
{ struct data user; user. type= ENDAD; user. username= username; user. value= "123" ; ui-> hintlable_3-> setText ( "" ) ; ui-> startattendancebtn-> setStyleSheet ( "background-color:#000000;border-radius:7px;color:#ffffff;" ) ; socket-> write ( user. toByteArray ( ) ) ;
} void Home :: endad_readyRead_slot ( )
{ QByteArray rawData = socket-> readAll ( ) ; const char * rawCharArray = rawData. constData ( ) ; socketinfo receivedInfo; memcpy ( & receivedInfo, rawCharArray, sizeof ( socketinfo) ) ; outputlog ( receivedInfo. data) ; socket-> disconnectFromHost ( ) ;
} void Home :: addname_connected_slot ( )
{ struct data user; user. type= NAMEADD; user. username= username; user. value= ui-> funcinput-> text ( ) ; socket-> write ( user. toByteArray ( ) ) ;
} void Home :: addname_readyRead_slot ( )
{ QByteArray rawData = socket-> readAll ( ) ; const char * rawCharArray = rawData. constData ( ) ; socketinfo receivedInfo; memcpy ( & receivedInfo, rawCharArray, sizeof ( socketinfo) ) ; outputlog ( "【" + ui-> funcinput-> text ( ) + "】" + receivedInfo. data) ; ui-> funcinput-> clear ( ) ; socket-> disconnectFromHost ( ) ;
} void Home :: getAllName_connected_slot ( )
{ struct data user; user. type= NAMEGETALL; user. username= username; user. value= "123" ; socket-> write ( user. toByteArray ( ) ) ;
} void Home :: getAllName_readyRead_slot ( )
{ QByteArray rawData = socket-> readAll ( ) ; const char * rawCharArray = rawData. constData ( ) ; socketinfo receivedInfo; memcpy ( & receivedInfo, rawCharArray, sizeof ( socketinfo) ) ; QString receivedData ( receivedInfo. data) ; QStringList records = receivedData. split ( "|" , Qt:: SkipEmptyParts) ; ui-> settable-> setRowCount ( records. size ( ) ) ; for ( int row = 0 ; row < records. size ( ) ; ++ row) { QStringList lines = records[ row] . split ( "\n" , Qt:: SkipEmptyParts) ; for ( int col = 0 ; col < lines. size ( ) ; ++ col) { QStringList keyValue = lines[ col] . split ( "&" , Qt:: SkipEmptyParts) ; QString key = keyValue[ 0 ] . trimmed ( ) ; QString value = keyValue[ 1 ] . trimmed ( ) ; QTableWidgetItem * item = new QTableWidgetItem ( value) ; ui-> settable-> setItem ( row, col, item) ; item-> setTextAlignment ( Qt:: AlignCenter) ; } } ui-> settable-> setColumnWidth ( 0 , 50 ) ; ui-> settable-> setColumnWidth ( 1 , 100 ) ; ui-> settable-> setColumnWidth ( 2 , 180 ) ; socket-> disconnectFromHost ( ) ;
} void Home :: deletename_connected_slot ( )
{ QList< QTableWidgetItem * > selectedItems = ui-> settable-> selectedItems ( ) ; if ( ! selectedItems. isEmpty ( ) ) { int selectedRow = selectedItems. first ( ) -> row ( ) ; QTableWidgetItem * item1 = ui-> settable-> item ( selectedRow, 0 ) ; QString content1 = item1-> text ( ) ; struct data user; user. type= NAMEDELETE; user. username= username; user. value= content1; socket-> write ( user. toByteArray ( ) ) ; } else { qDebug ( ) << "No row selected." ; }
} void Home :: deletename_readyRead_slot ( )
{ QByteArray rawData = socket-> readAll ( ) ; const char * rawCharArray = rawData. constData ( ) ; socketinfo receivedInfo; memcpy ( & receivedInfo, rawCharArray, sizeof ( socketinfo) ) ; outputlog ( receivedInfo. data) ; socket-> disconnectFromHost ( ) ;
} void Home :: searchname_connected_slot ( )
{ struct data user; user. type= NAMESEARCH; user. username= username; user. value= ui-> funcinput-> text ( ) ; socket-> write ( user. toByteArray ( ) ) ;
} void Home :: searchname_readyRead_slot ( )
{ QByteArray rawData = socket-> readAll ( ) ; const char * rawCharArray = rawData. constData ( ) ; socketinfo receivedInfo; memcpy ( & receivedInfo, rawCharArray, sizeof ( socketinfo) ) ; QString receivedData ( receivedInfo. data) ; QStringList records = receivedData. split ( "|" , Qt:: SkipEmptyParts) ; ui-> settable-> setRowCount ( records. size ( ) ) ; for ( int row = 0 ; row < records. size ( ) ; ++ row) { QStringList lines = records[ row] . split ( "\n" , Qt:: SkipEmptyParts) ; for ( int col = 0 ; col < lines. size ( ) ; ++ col) { QStringList keyValue = lines[ col] . split ( "&" , Qt:: SkipEmptyParts) ; QString key = keyValue[ 0 ] . trimmed ( ) ; QString value = keyValue[ 1 ] . trimmed ( ) ; QTableWidgetItem * item = new QTableWidgetItem ( value) ; ui-> settable-> setItem ( row, col, item) ; item-> setTextAlignment ( Qt:: AlignCenter) ; } } ui-> settable-> setColumnWidth ( 0 , 50 ) ; ui-> settable-> setColumnWidth ( 1 , 100 ) ; ui-> settable-> setColumnWidth ( 2 , 180 ) ; socket-> disconnectFromHost ( ) ;
} void Home :: getadList_connected_slot ( )
{ struct data user; user. type= NAMEHISTORY; user. username= username; user. value= "123" ; socket-> write ( user. toByteArray ( ) ) ;
} void Home :: getadList_readyRead_slot ( )
{ QByteArray rawData = socket-> readAll ( ) ; const char * rawCharArray = rawData. constData ( ) ; socketinfo receivedInfo; memcpy ( & receivedInfo, rawCharArray, sizeof ( socketinfo) ) ; QString receivedData ( receivedInfo. data) ; QStringList records = receivedData. split ( "|" , Qt:: SkipEmptyParts) ; ui-> settable-> setRowCount ( records. size ( ) ) ; for ( int row = 0 ; row < records. size ( ) ; ++ row) { QStringList lines = records[ row] . split ( "\n" , Qt:: SkipEmptyParts) ; for ( int col = 0 ; col < lines. size ( ) ; ++ col) { QStringList keyValue = lines[ col] . split ( "&" , Qt:: SkipEmptyParts) ; QString key = keyValue[ 0 ] . trimmed ( ) ; QString value = keyValue[ 1 ] . trimmed ( ) ; QTableWidgetItem * item = new QTableWidgetItem ( value) ; ui-> settable-> setItem ( row, col, item) ; item-> setTextAlignment ( Qt:: AlignCenter) ; } } ui-> settable-> setColumnWidth ( 0 , 50 ) ; ui-> settable-> setColumnWidth ( 1 , 80 ) ; ui-> settable-> setColumnWidth ( 2 , 80 ) ; ui-> settable-> setColumnWidth ( 3 , 160 ) ; socket-> disconnectFromHost ( ) ;
} void Home :: stuad_connected_slot ( )
{ struct data user; user. type= STUAD; user. username= username; user. value= teachEdit-> text ( ) ; user. value1= adkeyEdit-> text ( ) ; socket-> write ( user. toByteArray ( ) ) ;
} void Home :: callname_connected_slot ( )
{ struct data user; user. type= NAMECALL; user. username= username; user. value= "123" ; user. value1= "123" ; socket-> write ( user. toByteArray ( ) ) ;
} void Home :: callname_readyRead_slot ( )
{ QByteArray rawData = socket-> readAll ( ) ; const char * rawCharArray = rawData. constData ( ) ; socketinfo receivedInfo; memcpy ( & receivedInfo, rawCharArray, sizeof ( socketinfo) ) ; outputlog ( receivedInfo. data) ; socket-> disconnectFromHost ( ) ;
} void Home :: stuad_readyRead_slot ( )
{ QByteArray rawData = socket-> readAll ( ) ; const char * rawCharArray = rawData. constData ( ) ; socketinfo receivedInfo; memcpy ( & receivedInfo, rawCharArray, sizeof ( socketinfo) ) ; stuHintLable-> setText ( receivedInfo. data) ; stuHintLable-> setStyleSheet ( "color:rgb(26, 136, 35);height:40px;" ) ; socket-> disconnectFromHost ( ) ;
} void Home :: on_startattendancebtn_clicked ( )
{ if ( ui-> startattendancebtn-> text ( ) == "发起签到" ) { socket = new QTcpSocket ( this ) ; socket-> connectToHost ( ip, port) ; connect ( socket, & QTcpSocket:: connected, this , & Home:: startad_connected_slot) ; connect ( socket, & QTcpSocket:: readyRead, this , & Home:: startad_readyRead_slot) ; ui-> startattendancebtn-> setText ( "关闭签到" ) ; } else { socket = new QTcpSocket ( this ) ; socket-> connectToHost ( ip, port) ; connect ( socket, & QTcpSocket:: connected, this , & Home:: endad_connected_slot) ; connect ( socket, & QTcpSocket:: readyRead, this , & Home:: endad_readyRead_slot) ; ui-> startattendancebtn-> setText ( "发起签到" ) ; ui-> startattendancebtn-> setStyleSheet ( "background-color:#000000;border-radius:7px;color:#ffffff;" ) ; } } void Home :: outputlog ( QString msg)
{ ui-> adEdit-> setText ( "【" + getCurretTime ( ) + "】" + msg+ "\n" + ui-> adEdit-> toPlainText ( ) ) ;
} QString Home :: getCurretTime ( )
{ QTime systime = QTime :: currentTime ( ) ; QString s = systime. toString ( "hh:mm:ss" ) ; return s;
} QString Home :: generateRandomString ( int length) { const QString charset = "123456789abcdefghijklmnpqrstuvwxyz" ; QString randomString; for ( int i = 0 ; i < length; ++ i) { int randomIndex = QRandomGenerator :: global ( ) -> bounded ( charset. length ( ) ) ; randomString. append ( charset. at ( randomIndex) ) ; } return randomString;
} void Home :: closeAllpage ( )
{ ui-> hintframe-> hide ( ) ; ui-> hintframe_2-> hide ( ) ; ui-> startattendancebtn-> hide ( ) ; ui-> setmainframe-> hide ( ) ; ui-> callnamebtn-> hide ( ) ;
} void Home :: openAdPage ( )
{ ui-> hintframe-> show ( ) ; ui-> hintframe_2-> show ( ) ; ui-> startattendancebtn-> show ( ) ; ui-> callnamebtn-> show ( ) ; this -> setWindowTitle ( "签到管理系统v1.0-签到" ) ;
} void Home :: openListPage ( )
{ this -> setWindowTitle ( "签到管理系统v1.0-记录" ) ; ui-> setmainframe-> show ( ) ; ui-> funcinput-> hide ( ) ; ui-> addbtn-> hide ( ) ; ui-> searchbtn-> hide ( ) ; ui-> deletebtn-> hide ( ) ; ui-> backbtn-> hide ( ) ; QStringList headerLabels; headerLabels << "ID" << "姓名" << "签到码" << "签到时间" ; ui-> settable-> setHorizontalHeaderLabels ( headerLabels) ; ui-> settable-> verticalHeader ( ) -> setVisible ( false ) ; ui-> settable-> setColumnCount ( 4 ) ; ui-> settable-> setStyleSheet ( "QScrollBar:vertical {" " background: #ffffff;" " width: 10px;" " margin: 16px 0px 16px 0px;" "}" "QScrollBar::handle:vertical {" " background: rgb(78, 79, 79);" " min-height: 10px;" "}" "QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {" " border: none;" " background: none;" "}" "QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {" " background: none;" "}" "#settable{background-color:#ffffff;color:#000000;}" "QTableWidget::item:selected {" " background-color: #eeeeee;" "color:#000000;" "}" ) ; socket = new QTcpSocket ( this ) ; socket-> connectToHost ( ip, port) ; connect ( socket, & QTcpSocket:: connected, this , & Home:: getadList_connected_slot) ; connect ( socket, & QTcpSocket:: readyRead, this , & Home:: getadList_readyRead_slot) ; for ( int row = 0 ; row < ui-> settable-> rowCount ( ) ; ++ row) { for ( int col = 0 ; col < ui-> settable-> columnCount ( ) ; ++ col) { QTableWidgetItem * item = new QTableWidgetItem ( QString ( "Row %1, Col %2" ) . arg ( row + 1 ) . arg ( col + 1 ) ) ; item-> setTextAlignment ( Qt:: AlignCenter) ; } }
} void Home :: openSetPage ( )
{ this -> setWindowTitle ( "签到管理系统v1.0-设置" ) ; ui-> setmainframe-> show ( ) ; ui-> funcinput-> show ( ) ; ui-> addbtn-> show ( ) ; ui-> searchbtn-> show ( ) ; ui-> deletebtn-> show ( ) ; ui-> backbtn-> show ( ) ; QStringList headerLabels; headerLabels << "ID" << "姓名" << "添加时间" ; ui-> settable-> setHorizontalHeaderLabels ( headerLabels) ; ui-> settable-> verticalHeader ( ) -> setVisible ( false ) ; ui-> settable-> setColumnCount ( 3 ) ; ui-> settable-> setColumnWidth ( 2 , 500 ) ; ui-> settable-> setStyleSheet ( "QScrollBar:vertical {" " background: #ffffff;" " width: 10px;" " margin: 16px 0px 16px 0px;" "}" "QScrollBar::handle:vertical {" " background: rgb(78, 79, 79);" " min-height: 10px;" "}" "QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {" " border: none;" " background: none;" "}" "QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {" " background: none;" "}" "#settable{background-color:#ffffff;color:#000000;}" "QTableWidget::item:selected {" " background-color: #eeeeee;" "color:#000000;" "}" ) ; socket = new QTcpSocket ( this ) ; socket-> connectToHost ( ip, port) ; connect ( socket, & QTcpSocket:: connected, this , & Home:: getAllName_connected_slot) ; connect ( socket, & QTcpSocket:: readyRead, this , & Home:: getAllName_readyRead_slot) ; for ( int row = 0 ; row < ui-> settable-> rowCount ( ) ; ++ row) { for ( int col = 0 ; col < ui-> settable-> columnCount ( ) ; ++ col) { QTableWidgetItem * item = new QTableWidgetItem ( QString ( "Row %1, Col %2" ) . arg ( row + 1 ) . arg ( col + 1 ) ) ; item-> setTextAlignment ( Qt:: AlignCenter) ; } } } void Home :: on_callbtn_2_clicked ( )
{ closeAllpage ( ) ; openListPage ( ) ;
} void Home :: on_callbtn_clicked ( )
{ closeAllpage ( ) ; openAdPage ( ) ;
} void Home :: on_callbtn_3_clicked ( )
{ closeAllpage ( ) ; openSetPage ( ) ;
} void Home :: on_callnamebtn_clicked ( )
{ socket = new QTcpSocket ( this ) ; socket-> connectToHost ( ip, port) ; connect ( socket, & QTcpSocket:: connected, this , & Home:: callname_connected_slot) ; connect ( socket, & QTcpSocket:: readyRead, this , & Home:: callname_readyRead_slot) ;
} void Home :: on_addbtn_clicked ( )
{ socket = new QTcpSocket ( this ) ; socket-> connectToHost ( ip, port) ; connect ( socket, & QTcpSocket:: connected, this , & Home:: addname_connected_slot) ; connect ( socket, & QTcpSocket:: readyRead, this , & Home:: addname_readyRead_slot) ;
} void Home :: on_deletebtn_clicked ( )
{ socket = new QTcpSocket ( this ) ; socket-> connectToHost ( ip, port) ; connect ( socket, & QTcpSocket:: connected, this , & Home:: deletename_connected_slot) ; connect ( socket, & QTcpSocket:: readyRead, this , & Home:: deletename_readyRead_slot) ; } void Home :: on_backbtn_clicked ( )
{ Widget * w = new Widget ( ) ; w-> show ( ) ; this -> close ( ) ;
} void Home :: on_searchbtn_clicked ( )
{ socket = new QTcpSocket ( this ) ; socket-> connectToHost ( ip, port) ; connect ( socket, & QTcpSocket:: connected, this , & Home:: searchname_connected_slot) ; connect ( socket, & QTcpSocket:: readyRead, this , & Home:: searchname_readyRead_slot) ;
}